在Android分享知道有一个更方便的方法。调用的共享面板来分享我们的应用程序的系统。主要实现例如,下面的:

  1. public Intent getShareIntent(){
  2. Intent intent = new Intent();
  3. intent.setAction(Intent.ACTION_SEND);
  4. intent.putExtra(Intent.EXTRA_TEXT, "这是測试分享面板, http://www.baidu.comss");
  5. intent.setType("text/plain");
  6. return intent;
  7. }

另一种是实如今ActionBar上加入分享列表,实现代码例如以下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:id="@+id/menu_item_share"
  4. android:showAsAction="ifRoom"
  5. android:title="Share"
  6. android:actionProviderClass="android.widget.ShareActionProvider" />
  7. </menu>

  1. @Override
  2. public boolean onCreateOptionsMenu(Menu menu) {
  3. getMenuInflater().inflate(R.menu.actionbar_menu, menu);
  4. MenuItem item = menu.findItem(R.id.menu_item_share);
  5. shareActionProvider = (ShareActionProvider) item.getActionProvider();
  6. Intent shareIntent = getShareIntent();
  7. shareActionProvider.setShareIntent(shareIntent);
  8. return true;
  9. }
  10.  
  11. public Intent getShareIntent(){
  12. Intent intent = new Intent();
  13. intent.setAction(Intent.ACTION_SEND);
  14. intent.putExtra(Intent.EXTRA_TEXT, "这是測试分享面板, http://www.baidu.comss");
  15. intent.setType("text/plain");
  16. return intent;
  17. }

系统默认会为我们找出全部支持seteType中类型的应用。相同我们能够实现自己定义分享的平台。

  1. private void initShareIntent() {
  2. Intent intent = new Intent(Intent.ACTION_SEND);
  3. intent.setType("text/plain");
  4. List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(
  5. intent, 0);
  6. if (!resInfo.isEmpty()) {
  7. List<Intent> targetedShareIntents = new ArrayList<Intent>();
  8. for (ResolveInfo info : resInfo) {
  9. Intent targeted = new Intent(Intent.ACTION_SEND);
  10. targeted.setType("text/plain");
  11. ActivityInfo activityInfo = info.activityInfo;
  12. //在这里能够加入对应的平台。用 || 连接
  13. if (activityInfo.packageName.contains("com.tencent.mm")) {
  14. targeted.putExtra(Intent.EXTRA_TEXT, "分享内容");
  15. targeted.setPackage(activityInfo.packageName);
  16. targetedShareIntents.add(targeted);
  17. }
  18. }
  19. Intent chooserIntent = Intent.createChooser(
  20. targetedShareIntents.remove(0), "Select app to share");
  21. if (chooserIntent == null) {
  22. return;
  23. }
  24. chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
  25. targetedShareIntents.toArray(new Parcelable[] {}));
  26. try {
  27. startActivity(chooserIntent);
  28. } catch (android.content.ActivityNotFoundException ex) {
  29. Toast.makeText(this, "Can't find sharecomponent to share",
  30. Toast.LENGTH_SHORT).show();
  31. }
  32. }
  33. }

系统的分享面板存在一些缺陷,比方每一个手机显示的面板的样式不同,不同手机上显示的分享平台种类和数目不同,会出现一些杂乱的应用。我们能够给上面的方法加入參数,让仅仅能分享到一个平台就能够解决问题。这样我们就能够自己定义一个分享面板。来加入我们想要的应用,代码例如以下:

  1. private void initShareIntent(String type) {
  2. boolean found = false;
  3. Intent share = new Intent(android.content.Intent.ACTION_SEND);
  4. share.setType("image/*");
  5. // gets the list of intentsthat can be loaded.
  6. List<ResolveInfo> resInfo =getPackageManager().queryIntentActivities(
  7. share, 0);
  8. if (!resInfo.isEmpty()) {
  9. for (ResolveInfo info : resInfo) {
  10. if (info.activityInfo.packageName.toLowerCase().contains(type)
  11. || info.activityInfo.name.toLowerCase().contains(type)) {
  12. share.putExtra(Intent.EXTRA_SUBJECT, "subject");
  13. share.putExtra(Intent.EXTRA_TEXT, "your text");
  14.  
  15. //share.putExtra(Intent.EXTRA_STREAM,
  16. // Uri.fromFile(newFile(myPath))); // Optional, just
  17. // // if you wanna
  18. // // share an
  19. // // image.
  20. share.setPackage(info.activityInfo.packageName);
  21. found = true;
  22. break;
  23. }
  24. }
  25. if (!found)
  26. return;
  27. startActivity(Intent.createChooser(share, "Select"));
  28. }
  29. }

Android定义自己的面板共享系统的更多相关文章

  1. android 21 隐式意图启动系统预定义activity

    Intent intent=new Intent(LoginActivity.this, MainActivity.class);//显示意图启动,显示从一个activity到另一个activity, ...

  2. Android融合推送MixPush SDK集成多家推送平台,共享系统级推送,杀死APP也能收到推送

    消息推送是App运营的重要一环,为了优化消息推送成功率,降低电量和流量消耗,系统级的推送服务显得尤为重要.小米和魅族由此推出了自家的推送平台,在MIUI和Flyme上共享系统级推送服务,让APP在被杀 ...

  3. Android手机如何通过USB共享网络给Mac?

    最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破 ...

  4. Android应用程序框架层和系统运行库层日志系统源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...

  5. Android震动vibrator(马达)--系统到驱动的流程【转】

    本文转载自:https://blog.csdn.net/tianshiyalin/article/details/17136723 一.前言 本人刚学习安卓驱动开发,水平不能说菜,是根本没有水平,在这 ...

  6. Android自定义日历控件(继承系统控件实现)

    Android自定义日历控件(继承系统控件实现) 主要步骤 编写布局 继承LinearLayout设置子控件 设置数据 继承TextView实现有圆圈背景的TextView 添加Attribute 添 ...

  7. Android定义的路径全局变量

    Android定义的路径全局变量 ifeq (,$(strip $(OUT_DIR))) OUT_DIR := $(TOPDIR)out endif DEBUG_OUT_DIR := $(OUT_DI ...

  8. Android 通过应用程序来设置系统的日期和时间中的

    Android 通过应用程序来设置系统的日期和时间中的 android 2.3 android 4.0 测试可行,刚需ROOT权限. import java.io.DataOutputStream; ...

  9. Android模拟、实现、触发系统按键事件的方法

     Android模拟.实现.触发系统按键事件的方法 /** * 模拟系统按键. * * @param keyCode */ public static void onKeyEvent(final ...

随机推荐

  1. Java实现定时任务的三种方法(转)

    在应用里经常都有用到在后台跑定时任务的需求.举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据.文件等.在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 Tim ...

  2. MySQL :: MySQL 5.0 Reference Manual :: 14.4 The MEMORY (HEAP) Storage Engine

    MySQL :: MySQL 5.0 Reference Manual :: 14.4 The MEMORY (HEAP) Storage Engine The MEMORY (HEAP) Stora ...

  3. HDU 4981 Goffi and Median(水)

    HDU 4981 Goffi and Median 思路:排序就能够得到中间数.然后总和和中间数*n比較一下就可以 代码: #include <cstdio> #include <c ...

  4. C++中的常对象和常对象成员

    常对象 常对象必须在定义对象时就指定对象为常对象. 常对象中的数据成员为常变量且必须要有初始值,如 Time const t1(12,34,36); //定义t1为常对象 这样的话,在所有的场合中,对 ...

  5. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  6. HDU4869:Turn the pokers(费马小定理+高速幂)

    Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...

  7. ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

    本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事件操作封装,还有扩展的常用函数等.Ajax服务端交互式操作是提交到.NET MVC.后续服务端交互都采用这一方式实现. ...

  8. 使用Xcode无法发布程序(Archive按钮一直为灰色不可点击)

    问题现象:想在Xcode中把代码编译发布成ipa程序,但“Product”->“Archive”按钮一直不可使用.   解决办法:目前的运行配置是使用模拟器,改成“iOS Device”即可   ...

  9. Swift - 按钮(UIButton)的用法

    1,按钮的创建 (1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDisc ...

  10. hdu 2147 SG函数打表(手写也可以) 找规律

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/1000 K (Java/Others) Total ...