Android App 實現分享功能及將應用加入分享列表 (分享功能可自定義需要分享的APP)


1,自己封裝的一個簡單的Class:

public class ShareSample {

    /**
     * 獲得分享列表(簡單實現,只是把核心的東西寫了寫。不是太實用)
     * **/
    public void getShareList(final String title,final String content,final Activity mActivity)
    {
        final Map<String,ResolveInfo> appInfo =new HashMap<String, ResolveInfo>();
        List<ResolveInfo> appList=getShareTargets(mActivity);
        final String[] items;
        if(appList.size()>0){
            for (int i = 0; i < appList.size(); i++) {
                ResolveInfo tmp_ri=(ResolveInfo)appList.get(i);
                //ActivityInfo tmp_ai=tmp_ri.activityInfo;
                ApplicationInfo apinfo=tmp_ri.activityInfo.applicationInfo;
                String tmp_appName = apinfo.loadLabel(mActivity.getPackageManager()).toString();
                //這里就做了一個簡單的得到應用名稱判斷, 實際情況根據 ResolveInfo 這東東 可以得到很多很多有用的東東哦。
                if(!tmp_appName.equals("微博"))
                {
                    continue;
                }
                appInfo.put(tmp_appName,tmp_ri);
            }
            items=new String[appInfo.size()];
            int j=0;
            for (Map.Entry<String,ResolveInfo> myEntry : appInfo.entrySet()) { 
                items[j]=myEntry.getKey();
                j++;
             } 
            
        }
        else{
            Toast.makeText(mActivity.getApplicationContext(),"暫無分享應用", Toast.LENGTH_SHORT).show();
            return;
        }
        if(appInfo.size()<1)
        {
            Toast.makeText(mActivity.getApplicationContext(),"暫無分享應用", Toast.LENGTH_SHORT).show();
            return;
        }
        /**
         * 這里用對話框簡單的一個實現,實際開發中應該要單獨抽取出來封裝成一個自定義的列表。
         * 
         * **/
        new AlertDialog.Builder(mActivity).setTitle("選擇分享") 
        .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int item) { 
            
            CreateShare(title,content,mActivity,appInfo.get(items[item]));
            //CreateShare(title,content,mActivity);
            dialog.cancel(); 
        } 

        }).show();//顯示對話框
        
    }
    
    /**
     * 實現自定義分享功能(主要就是啟動對應的App)
     * **/
    private void CreateShare(String title,String content ,Activity activity,ResolveInfo appInfo) {  
        
        try
        {
            Intent shareIntent=new Intent(Intent.ACTION_SEND);
             shareIntent.setComponent(new ComponentName(appInfo.activityInfo.packageName, appInfo.activityInfo.name));  
             //這里就是組織內容了,  
            // shareIntent.setType("text/plain"); 
             shareIntent.setType("image/*"); 
             shareIntent.putExtra(Intent.EXTRA_TEXT, content);  
             shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
             activity.startActivity(shareIntent);  
            
        }catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }
        
        
       
    }  
    /**
     * 默認分享列表(網上一大堆)
     * **/
    private void CreateShare(String title,String content ,Activity activity) {  
        Intent intent=new Intent(Intent.ACTION_SEND);
        intent.setType("image/*");   
        intent.putExtra(Intent.EXTRA_SUBJECT, title);   
        intent.putExtra(Intent.EXTRA_TEXT, content);    
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
        activity.startActivity(Intent.createChooser(intent, title));
        
    }
    /**
     * 獲得所有帶Intent.ACTION_SEND的應用列表。 ResolveInfo 這個東東真不錯。
     * **/
    private List<ResolveInfo> getShareTargets(Activity activity){
        Intent intent=new Intent(Intent.ACTION_SEND,null);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setType("text/plain");
        PackageManager pm=activity.getPackageManager();
        return pm.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
        }
}

2.測試調用:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try
        {
          ShareSample sample =new ShareSample();
          sample.getShareList("分享標題", "要分享的內容哦。呵呵", this);
        }catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }
}

3.應用加入系統分享列表(這個在網上Copy的木有驗證過)
只需在AndroidManifest.xml中加入以下代碼:

<activity android:name=".SharePage" android:label="分享到微博">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

 

4.小結:  

不是太復雜的東西。但如果不知道 ResolveInfo 這個東東怎么用就不太好搞了。(偶開始就不知道所以糾結了一下下。Android 小菜菜)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM