首先來說一下使用系統的分享功能:首先來說一下使用系統的分享功能:結合項目主要是語音的分享
調用系統的分析功能就簡單多了,主要是設置一下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 語音分享效果,如下: