android 調用系統分享功能以及實現自定義分享

在這次的語言備忘錄項目中使用到瞭分享功能,今天周五瞭總結一下使用的心得:
首先來說一下使用系統的分享功能:首先來說一下使用系統的分享功能:結合項目主要是語音的分享

調用系統的分析功能就簡單多瞭,主要是設置一下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中:vcD4KPHA+PHByZSBjbGFzcz0=”brush:java;”>public static List getShareApps(Context context) {
List mApps = new ArrayList();
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 語音分享效果,如下:

發佈留言