首先来说一下使用系统的分享功能:首先来说一下使用系统的分享功能:结合项目主要是语音的分享
调用系统的分析功能就简单多了,主要是设置一下Intent 对象的一些属性,然后start就好了。
public static void shareMemo(Context context, String path) { Uri uri = Uri.parse("file:///" + path); Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_STREAM, uri); it.setType("audio/*"); context.startActivity(Intent.createChooser(it, "共享语音备忘录"))); }
效果如下图
下面主要说一下 自定义分享功能实现,主要是自定义界面,主要要做的工作是获取到可分享的应用列表,然后显示应用列表,点击,使用该应用分享语音。
先看代码获取有分享功能的应用列表,将列表信息放在list中:
public static List<ResolveInfo> getShareApps(Context context) { List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); Intent intent = new Intent(Intent.ACTION_SEND, null); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setType("audio/*"); PackageManager pManager = context.getPackageManager(); mApps = pManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); return mApps; }
例如我们用一个ListView 来展示应用列表,下面就是设置adapter,下面主要看ListView的item的click事件:在onClick中我们将被分享的资源的Uri传递进去,以及获取到被点击的应用对应的ResolveInfo 对象的activityInfo.packageName和activityInfo.name,代码如下
ResolveInfo appInfo=(ResolveInfo) list.get(arg2); Uri uri = Uri.parse("file:///" + path); Intent shareIntent=new Intent(Intent.ACTION_SEND); shareIntent.setComponent(new ComponentName(appInfo.activityInfo.packageName, appInfo.activityInfo.name)); shareIntent.setType("audio/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(shareIntent);实现效果图仿IOS7 语音分享效果,如下: