在Android中实现分享有一种比较方便的方式,调用系统的分享面板来分享我们的应用。最基本的实现如下:

public Intent getShareIntent(){Intent intent = new Intent();intent.setAction(Intent.ACTION_SEND);intent.putExtra(Intent.EXTRA_TEXT, "这是测试分享面板, http://www.baidu.comss");intent.setType("text/plain");return intent;}
还有一种是实现在ActionBar上添加分享列表,实现代码如下:

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

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.actionbar_menu, menu);MenuItem item = menu.findItem(R.id.menu_item_share);shareActionProvider = (ShareActionProvider) item.getActionProvider();Intent shareIntent = getShareIntent();shareActionProvider.setShareIntent(shareIntent);return true;}public Intent getShareIntent(){Intent intent = new Intent();intent.setAction(Intent.ACTION_SEND);intent.putExtra(Intent.EXTRA_TEXT, "这是测试分享面板, http://www.baidu.comss");intent.setType("text/plain");return intent;}
系统默认会为我们找出所有支持seteType中类型的应用,同样我们可以实现自定义分享的平台。
private void initShareIntent() {Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);if (!resInfo.isEmpty()) {List<Intent> targetedShareIntents = new ArrayList<Intent>();for (ResolveInfo info : resInfo) {Intent targeted = new Intent(Intent.ACTION_SEND);targeted.setType("text/plain");ActivityInfo activityInfo = info.activityInfo;//在这里可以添加相应的平台,用 || 连接if (activityInfo.packageName.contains("com.tencent.mm")) {targeted.putExtra(Intent.EXTRA_TEXT, "分享内容");targeted.setPackage(activityInfo.packageName);targetedShareIntents.add(targeted);}}Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");if (chooserIntent == null) {return;}chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,targetedShareIntents.toArray(new Parcelable[] {}));try {startActivity(chooserIntent);} catch (android.content.ActivityNotFoundException ex) {Toast.makeText(this, "Can't find sharecomponent to share",Toast.LENGTH_SHORT).show();}}}
系统的分享面板存在一些缺陷,比如每个手机显示的面板的样式不同,不同手机上显示的分享平台种类和数目不同,会出现一些杂乱的应用。我们可以给上面的方法添加参数,让只能分享到一个平台就可以解决这个问题,这样我们就可以自定义一个分享面板,来添加我们想要的应用,代码如下:

private void initShareIntent(String type) {      boolean found = false;      Intent share = new Intent(android.content.Intent.ACTION_SEND);      share.setType("image/*");      // gets the list of intentsthat can be loaded.      List<ResolveInfo> resInfo =getPackageManager().queryIntentActivities(           share, 0);      if (!resInfo.isEmpty()) {        for (ResolveInfo info : resInfo) {           if (info.activityInfo.packageName.toLowerCase().contains(type)                 || info.activityInfo.name.toLowerCase().contains(type)) {              share.putExtra(Intent.EXTRA_SUBJECT, "subject");              share.putExtra(Intent.EXTRA_TEXT, "your text");              //share.putExtra(Intent.EXTRA_STREAM,              // Uri.fromFile(newFile(myPath))); // Optional, just              // // if you wanna              // // share an              // // image.              share.setPackage(info.activityInfo.packageName);              found = true;              break;           }        }        if (!found)           return;        startActivity(Intent.createChooser(share, "Select"));      }   }

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. Ubuntu下搭建Android开发平台
  3. android 拨号面板
  4. Android(安卓)版本速查表
  5. Android(安卓)系统编译环境设置及源代码编译
  6. Android系统零碎知识整理
  7. unity3d Android(安卓)SDK 安装
  8. android 退出系统
  9. 【Android(安卓)电量优化】电量优化特性 ( Doze 低电耗模式 | St

随机推荐

  1. 基于Android(安卓)Webview的Hybrid App开
  2. Android(安卓)手机获取手机号实现方法
  3. Android(安卓)通过module进行开发
  4. android 游戏引擎libgdx demo cuboc分析
  5. Android(安卓)学习之《第一行代码》第二
  6. Android(安卓)渗透测试学习手册(四)对 Andr
  7. Android(安卓)开发中发送http请求
  8. android中如何利用attrs和styles定义控件
  9. Android(安卓)进程
  10. Android8.0.0-r4系统的启动过程