Android項目總結之社會化分享

隨着如今社交網絡的日益繁多,衆多的社交客戶端已佔據了人們的大量時間,因此在咱們的應用中具備一鍵分享的功能對提升咱們產品的知名度有很大的幫助。新浪微博、騰訊微博、騰訊QQ、微信、QQ空間、豆瓣等衆多知名社交站點,都是咱們能夠分享的去處,固然,分享功能涉及到別人第三方的權益,確定是由他們提供SDK等支持,咱們才能進行分享使用。既然分享如何重要,那麼咱們就該學習下Android系統如何實現分享功能。android

如今在Android系統中進行分享,主要有兩種手段,一種是經過系統自帶的來啓動分享功能;第二種是經過第三方的SDK插件進行分享;下面咱們來簡要介紹下兩種手段:swift

1、Android系統啓動分享功能

毫無疑問,經過系統來啓動的分享功能很簡單,也很是容易實現,咱們直接來寫個demo演示下。api

一、仍是先看一個佈局文件,佈局文件很簡單,僅僅一個button按鈕來觸發分享功能便可。微信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     xmlns:tools= "http://schemas.android.com/tools"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     tools:context= ".MainActivity" >
 
     <Button
         android:id= "@+id/btn_share"
         android:text= "@string/hello_world"
         android:layout_width= "wrap_content"
         android:layout_height= "wrap_content"
         android:padding= "10dp" />
 
     </RelativeLayout>

二、直接看實現的代碼:網絡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class MainActivity extends ActionBarActivity {
     private Button btn_share;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         btn_share = (Button) findViewById(R.id.btn_share);
         btn_share.setOnClickListener( new  View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 shareBySystem();
             }
         });
     }
 
     /**
      * 經過系統的組件進行分享
      */
     private void shareBySystem(){
         Intent intent =  new  Intent(Intent.ACTION_SEND);
         intent.setType( "image/*" );
         intent.putExtra(Intent.EXTRA_SUBJECT, "Share" );
         //設置分享的內容
         intent.putExtra(Intent.EXTRA_TEXT,  "I have successfully)" );
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         startActivity(Intent.createChooser(intent, getTitle()));
     }

僅僅經過系統的Intent組件來指定咱們分享的內容便可,下面來看下效果圖。 app

blob.png

咱們看到上面有了咱們的分享功能,效果還不錯,可是咱們憂愁的發現,沒有咱們常見的QQ、新浪微博、豆瓣啊!確實,這就是它的侷限性,簡單,可是不必定能達到咱們的特殊需求,此時,第三方的SDK火速前來救駕,用到它的時候出現了。ide

2、第三方組件ShareSDK的使用

咱們知道,當咱們分享到騰訊、新浪這些主流社交平臺時,確定須要他們提供的不一樣SDK來進行支持,若是咱們支持十幾種平臺,豈不是很麻煩,怎搞?既然有需求,確定有商機,因此這個問題早被人家給解決了,即咱們即將學習的ShareSDK的使用。下面咱們分步驟介紹下它的使用。工具

一、在mob官網進行註冊一個開發者帳號,而後填寫相關的認證信息便可。佈局

二、下載官方提供的SDK。我已經下載好了,最新版本v2.6.3,下載地址sdk下載地址學習

三、進入ShareSDK解壓目錄,打開「Share SDK for Android」目錄,能夠找到「QuickIntegrater.jar」,這個就是快速集成ShareSDK的工具,咱們雙擊該工具,選擇咱們要分享的平臺,填寫好事例名稱和包名,點擊【肯定】,而後系統自動給咱們生成一個咱們須要的demo。 

blob.png

四、咱們賦值文件夾下的對應文件,拷貝到咱們工程目錄便可。 

blob.png

五、至此,全部須要的文件都已經拷貝到咱們工程中,咱們接下來就是修改Manifest文件的配置。 
(1)、添加權限:

1
2
3
4
5
6
7
8
9
10
11
12
<uses-permission android:name= "android.permission.GET_TASKS"  />
     <uses-permission android:name= "android.permission.INTERNET"  />
     <uses-permission android:name= "android.permission.ACCESS_WIFI_STATE"  />
     <uses-permission android:name= "android.permission.ACCESS_NETWORK_STATE"  />
     <uses-permission android:name= "android.permission.CHANGE_WIFI_STATE"  />
     <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE"  />
     <uses-permission android:name= "android.permission.READ_PHONE_STATE"  />
     <uses-permission android:name= "android.permission.MANAGE_ACCOUNTS" />
     <uses-permission android:name= "android.permission.GET_ACCOUNTS" />
     <!-- 藍牙分享所需的權限 -->
     <uses-permission android:name= "android.permission.BLUETOOTH"  />
     <uses-permission android:name= "android.permission.BLUETOOTH_ADMIN"  />

(2)、配置咱們分享的主流平臺的Activity文件,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!-- QQ客戶端回調 -->
         <activity 
             android:name= "cn.sharesdk.tencent.qq.ResultReceiver"
             android:launchMode= "singleTask"
             android:noHistory= "true" >
             <!--
                 若是集成QQ分享,或者使用QQ客戶端來進行QQ空間的分享,需要在此處添加一個對ACTION_VIEW
                 事件的過濾器,其中的scheme是「tencent」前綴再開發者應用的加上appId。若是此過濾器不設置,
                 則分享結束之後不能獲得正確的回調
             -->
             <intent-filter android:priority= "1000"  >
                 <data android:scheme= "tencent100371282"  />
                 <action android:name= "android.intent.action.VIEW"  />
                 <category android:name= "android.intent.category.DEFAULT"  />
                 <category android:name= "android.intent.category.BROWSABLE"  />
             </intent-filter>
         </activity>
 
         <!-- 微信分享回調 -->
         <activity
             android:name= ".wxapi.WXEntryActivity"
             android:theme= "@android:style/Theme.Translucent.NoTitleBar"
             android:configChanges= "keyboardHidden|orientation|screenSize"
             android:exported= "true"  />
         <!-- 易信分享回調 -->
         <activity
             android:name= ".yxapi.YXEntryActivity"
             android:theme= "@android:style/Theme.Translucent.NoTitleBar"
             android:configChanges= "keyboardHidden|orientation|screenSize"
             android:excludeFromRecents= "true"
             android:exported= "true"
             android:launchMode= "singleTop"  />        
         <!-- 支付寶分享回調 -->
         <activity
             android:name= ".apshare.ShareEntryActivity"
             android:theme= "@android:style/Theme.Translucent.NoTitleBar"
             android:configChanges= "keyboardHidden|orientation|screenSize"
             android:exported= "true" />
 
         <!-- 調用新浪原生SDK,須要註冊的activity -->
         <activity
             android:name= "com.sina.weibo.sdk.component.WeiboSdkBrowser"
             android:configChanges= "keyboardHidden|orientation"
             android:windowSoftInputMode= "adjustResize"
             android:exported= "false"  >
         </activity>
 
         <!-- 調用新浪原生SDK,須要註冊的回調activity -->
         <activity
             android:name= "cn.sharesdk.sina.weibo.SinaActivity"
             android:theme= "@android:style/Theme.Translucent.NoTitleBar" >
             <intent-filter>
                 <action android:name= "com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"  />
                 <category android:name= "android.intent.category.DEFAULT"  />
             </intent-filter>
         </activity>

六、咱們知道咱們使用第三方的SDK,他們都會要求咱們提供應用的App_key進行識別,因此ShareSDK也不例外,在作第4步時,咱們須要將assets文件夾下的一個xml文件進行拷貝,這個文件裏面包含了咱們分享的各個平臺的App_key信息,例如: 

blob.png

七、至此,全部配置基本完成,咱們只須要在代碼中調用分享功能便可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void showShare() {
          ShareSDK.initSDK( this );
          OnekeyShare oks =  new  OnekeyShare();
          //關閉sso受權
          oks.disableSSOWhenAuthorize(); 
 
         // 分享時Notification的圖標和文字  2.5.9之後的版本不調用此方法
          //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
          // title標題,印象筆記、郵箱、信息、微信、人人網和QQ空間使用
          oks.setTitle(getString(R.string.share));
          // titleUrl是標題的網絡連接,僅在人人網和QQ空間使用
          oks.setTitleUrl( "http://sharesdk.cn" );
          // text是分享文本,全部平臺都須要這個字段
          oks.setText( "我是分享文本" );
          // imagePath是圖片的本地路徑,Linked-In之外的平臺都支持此參數
          oks.setImagePath( "/sdcard/test.jpg" ); //確保SDcard下面存在此張圖片
          // url僅在微信(包括好友和朋友圈)中使用
          oks.setUrl( "http://sharesdk.cn" );
          // comment是我對這條分享的評論,僅在人人網和QQ空間使用
          oks.setComment( "我是測試評論文本" );
          // site是分享此內容的網站名稱,僅在QQ空間使用
          oks.setSite(getString(R.string.app_name));
          // siteUrl是分享此內容的網站地址,僅在QQ空間使用
          oks.setSiteUrl( "http://sharesdk.cn" );
 
         // 啓動分享GUI
          oks.show( this );
          }

而後咱們在Button的onClick事件中進行響應便可。

1
2
3
4
5
6
7
btn_share.setOnClickListener( new  OnClickListener() {
 
             @Override
             public void onClick(View v) {
                 showShare();
             }
         });

至此,咱們使用ShareSDK的快速集成已經完成了。注意,ShareSDK僅僅是一個將個平臺的分享集成的一個工具,咱們仍是要去各個社交平臺去註冊帳戶,而後註冊應用信息,才能獲取對應的App_key進行使用。看看效果圖吧! 

blob.png

這個就是一個簡單的快速集成介紹,更多高級功能確定不會這麼簡單,好比這裏的方向,彈出的對話框的樣式,都是固定死的,不夠靈活,咱們能夠本身定製,在下篇博客中在來學習下高級的用法。

源碼地址

相關文章
相關標籤/搜索