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中:

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 語音分享效果,如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章