Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android App實現分享功能及將應用加入分享列表示例

Android App實現分享功能及將應用加入分享列表示例

編輯:Android開發實例

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

  1. public class ShareSample { 
  2.  
  3.     /** 
  4.      * 獲得分享列表(簡單實現,只是把核心的東西寫了寫。不是太實用) 
  5.      * **/ 
  6.     public void getShareList(final String title,final String content,final Activity mActivity) 
  7.     { 
  8.         final Map<String,ResolveInfo> appInfo =new HashMap<String, ResolveInfo>(); 
  9.         List<ResolveInfo> appList=getShareTargets(mActivity); 
  10.         final String[] items; 
  11.         if(appList.size()>0){ 
  12.             for (int i = 0; i < appList.size(); i++) { 
  13.                 ResolveInfo tmp_ri=(ResolveInfo)appList.get(i); 
  14.                 //ActivityInfo tmp_ai=tmp_ri.activityInfo; 
  15.                 ApplicationInfo apinfo=tmp_ri.activityInfo.applicationInfo; 
  16.                 String tmp_appName = apinfo.loadLabel(mActivity.getPackageManager()).toString(); 
  17.                 //這裡就做了一個簡單的得到應用名稱判斷, 實際情況根據 ResolveInfo 這東東 可以得到很多很多有用的東東哦。 
  18.                 if(!tmp_appName.equals("微博")) 
  19.                 { 
  20.                     continue; 
  21.                 } 
  22.                 appInfo.put(tmp_appName,tmp_ri); 
  23.             } 
  24.             items=new String[appInfo.size()]; 
  25.             int j=0; 
  26.             for (Map.Entry<String,ResolveInfo> myEntry : appInfo.entrySet()) {  
  27.                 items[j]=myEntry.getKey(); 
  28.                 j++; 
  29.              }  
  30.              
  31.         } 
  32.         else{ 
  33.             Toast.makeText(mActivity.getApplicationContext(),"暫無分享應用", Toast.LENGTH_SHORT).show(); 
  34.             return; 
  35.         } 
  36.         if(appInfo.size()<1) 
  37.         { 
  38.             Toast.makeText(mActivity.getApplicationContext(),"暫無分享應用", Toast.LENGTH_SHORT).show(); 
  39.             return; 
  40.         } 
  41.         /** 
  42.          * 這裡用對話框簡單的一個實現,實際開發中應該要單獨抽取出來封裝成一個自定義的列表。 
  43.          *  
  44.          * **/ 
  45.         new AlertDialog.Builder(mActivity).setTitle("選擇分享")  
  46.         .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {  
  47.         public void onClick(DialogInterface dialog, int item) {  
  48.              
  49.             CreateShare(title,content,mActivity,appInfo.get(items[item])); 
  50.             //CreateShare(title,content,mActivity); 
  51.             dialog.cancel();  
  52.         }  
  53.  
  54.         }).show();//顯示對話框 
  55.          
  56.     } 
  57.      
  58.     /** 
  59.      * 實現自定義分享功能(主要就是啟動對應的App) 
  60.      * **/ 
  61.     private void CreateShare(String title,String content ,Activity activity,ResolveInfo appInfo) {   
  62.          
  63.         try 
  64.         { 
  65.             Intent shareIntent=new Intent(Intent.ACTION_SEND); 
  66.              shareIntent.setComponent(new ComponentName(appInfo.activityInfo.packageName, appInfo.activityInfo.name));   
  67.              //這裡就是組織內容了,   
  68.             // shareIntent.setType("text/plain");  
  69.              shareIntent.setType("image/*");  
  70.              shareIntent.putExtra(Intent.EXTRA_TEXT, content);   
  71.              shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
  72.              activity.startActivity(shareIntent);   
  73.              
  74.         }catch (Exception e) { 
  75.             e.printStackTrace(); 
  76.             // TODO: handle exception 
  77.         } 
  78.          
  79.          
  80.         
  81.     }   
  82.     /** 
  83.      * 默認分享列表(網上一大堆) 
  84.      * **/ 
  85.     private void CreateShare(String title,String content ,Activity activity) {   
  86.         Intent intent=new Intent(Intent.ACTION_SEND); 
  87.         intent.setType("image/*");    
  88.         intent.putExtra(Intent.EXTRA_SUBJECT, title);    
  89.         intent.putExtra(Intent.EXTRA_TEXT, content);     
  90.         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
  91.         activity.startActivity(Intent.createChooser(intent, title)); 
  92.          
  93.     } 
  94.     /** 
  95.      * 獲得所有帶Intent.ACTION_SEND的應用列表。 ResolveInfo 這個東東真不錯。 
  96.      * **/ 
  97.     private List<ResolveInfo> getShareTargets(Activity activity){ 
  98.         Intent intent=new Intent(Intent.ACTION_SEND,null); 
  99.         intent.addCategory(Intent.CATEGORY_DEFAULT); 
  100.         intent.setType("text/plain"); 
  101.         PackageManager pm=activity.getPackageManager(); 
  102.         return pm.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); 
  103.         } 

2.測試調用:

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

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

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

 

4.小結:  

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

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved