Android應用中使用及實現系統「分享」接口

爲了應用的推廣、傳播,不少的應用中都有「分享」功能,一個按鈕,點擊後會出現短信、微博等等一切實現了分享功能的應用列表。這一篇文章主要介紹怎麼調用分享功能和怎麼實現分享接口讓本身應用出現分享列表中。Android應用中能很方便的完成這些功能,這也正是Android的偉大之處,他能很簡單的完成應用之間的溝通以相互整合。html

 

調用分享功能

一、分享文本

分享功能使用的隱式啓動Activity的方法,這裏的Action使用的是 ACTION_SEND java

 

[java]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
 
  1. Intent sendIntent = new Intent();  
  2. sendIntent.setAction(Intent.ACTION_SEND);  
  3. sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");  
  4. sendIntent.setType("text/plain");  
  5. startActivity(sendIntent);  

 

 

效果以下圖的圖一。react

二、改變分享列表標題

    使用上面的分享方式分享列表標題爲「使用一下內容完成操做」,Android中提供了Intent.createChooser() ,這樣能一直顯示分享選擇列表,而且修改了分享列表標題內容。android

 

[java]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
 
  1. Intent sendIntent = new Intent();  
  2. sendIntent.setAction(Intent.ACTION_SEND);  
  3. sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");  
  4. sendIntent.setType("text/plain");  
  5. startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));  


使用Intent.createChooser()的好處:api

 

 

 If you callIntent.createChooser() for the intent, Android will always display the chooser. This has some advantages:app

  • Even if the user has previously selected a default action for this intent, the chooser will still be displayed.
  • If no applications match, Android displays a system message.
  • You can specify a title for the chooser dialog.

 

                    

 

    分享功能不僅是Intent.EXTRA_TEXT,還能夠 EXTRA_EMAILEXTRA_CCEXTRA_BCC,EXTRA_SUBJECT. 只須要接受方完成響應數據接受。ide

 

三、分享圖片

    分享功能還支持二進制內容(Binary Content),可是多數是處理的圖片,由於shareIntent.setType("image/jpeg")這一項設置了內容類型。可也以是其餘類型,須要接受方支持。ui

 

[java]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
 
  1. Intent shareIntent = new Intent();  
  2. shareIntent.setAction(Intent.ACTION_SEND);  
  3. shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);  
  4. shareIntent.setType("image/jpeg");  
  5. startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));  

 

 

四、分享圖片列表

    分享功能不只支持單張圖片,還支持圖片列表,這裏仍是說的範圍太窄了,應該聲明不單單是圖片。this

 

[java]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
 
  1. ArrayList<Uri> imageUris = new ArrayList<Uri>();  
  2. imageUris.add(imageUri1); // Add your image URIs here  
  3. imageUris.add(imageUri2);  
  4.   
  5. Intent shareIntent = new Intent();  
  6. shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);  
  7. shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);  
  8. shareIntent.setType("image/*");  
  9. startActivity(Intent.createChooser(shareIntent, "Share images to.."));  



 

實現分享功能

    上面說的都是怎麼調用分享功能,如下就開始寫怎麼實現分享功能,讓咱們的應用也出如今分享列表中。前面也說了分享功能是使用隱式調用Activtiy實現的,Activity須要聲明 <intent-filter> 。spa

 

聲明intent-filter

 

[java]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
 
  1. <activity  
  2.            android:name="com.example.sharedemo.ShareActivity"  
  3.            android:label="@string/app_name" >  
  4.            <intent-filter>  
  5.                <action android:name="android.intent.action.SEND" />  
  6.   
  7.                <category android:name="android.intent.category.DEFAULT" />  
  8.   
  9.                <data android:mimeType="image/*" />  
  10.            </intent-filter>  
  11.            <intent-filter>  
  12.                <action android:name="android.intent.action.SEND" />  
  13.   
  14.                <category android:name="android.intent.category.DEFAULT" />  
  15.   
  16.                <data android:mimeType="text/plain" />  
  17.            </intent-filter>  
  18.            <intent-filter>  
  19.                <action android:name="android.intent.action.SEND_MULTIPLE" />  
  20.   
  21.                <category android:name="android.intent.category.DEFAULT" />  
  22.   
  23.                <data android:mimeType="image/*" />  
  24.            </intent-filter>  
  25.        </activity>  

 

 

上面聲明瞭三種intent-filter,固然能夠更多,這裏只是舉個例子,

 

處理接收數據

聲明瞭intent-filter,響應的Activity就要處理響應的數據,示例以下:

 

[java]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
 
  1. public class ShareActivity extends Activity{  
  2.   
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         // TODO Auto-generated method stub  
  6.         super.onCreate(savedInstanceState);  
  7.           
  8.         // Get intent, action and MIME type  
  9.         Intent intent = getIntent();  
  10.         String action = intent.getAction();  
  11.         String type = intent.getType();  
  12.   
  13.         if (Intent.ACTION_SEND.equals(action) && type != null) {  
  14.             if ("text/plain".equals(type)) {  
  15.                 handleSendText(intent); // Handle text being sent  
  16.             } else if (type.startsWith("image/")) {  
  17.                 handleSendImage(intent); // Handle single image being sent  
  18.             }  
  19.         } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {  
  20.             if (type.startsWith("image/")) {  
  21.                 handleSendMultipleImages(intent); // Handle multiple images being sent  
  22.             }  
  23.         } else {  
  24.             // Handle other intents, such as being started from the home screen  
  25.         }  
  26.     }  
  27.   
  28.     void handleSendText(Intent intent) {  
  29.         String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);  
  30.         String sharedTitle = intent.getStringExtra(Intent.EXTRA_TITLE);  
  31.         if (sharedText != null) {  
  32.             // Update UI to reflect text being shared  
  33.         }  
  34.     }  
  35.   
  36.     void handleSendImage(Intent intent) {  
  37.         Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);  
  38.         if (imageUri != null) {  
  39.             // Update UI to reflect image being shared  
  40.         }  
  41.     }  
  42.   
  43.     void handleSendMultipleImages(Intent intent) {  
  44.         ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);  
  45.         if (imageUris != null) {  
  46.             // Update UI to reflect multiple images being shared  
  47.         }  
  48.     }  
  49. }  

 

 

經過聲明intent-filter,處理接受到的數據就能完成分享的接收功能。

 

更多

    上面只作了分享功能簡單的說明,伴隨着Android api的升級,也出現了一些新的完成「分享」功能的方法,好比 ShareActionProvider ,更多請參考。

 

 

示例下載

 

/**
* @author 張興業
*  iOS入門羣:83702688
*  android開發進階羣:241395671
*  個人新浪微博:@張興業TBOW
*/

 

 

參考:

http://developer.android.com/training/sharing/index.html

相關文章
相關標籤/搜索