国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)新浪微博一鍵分享的實(shí)例代碼

2019-10-22 18:31:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

寫在本章前

愈來(lái)愈多的APP支持一鍵分享至QQ空間、微信朋友圈、新浪微博的功能,同時(shí)支持第三方賬號(hào)登錄,如QQ、微信、新浪微博等第三方平臺(tái)的賬號(hào)。本章結(jié)合當(dāng)下流行的設(shè)計(jì),兼顧免費(fèi)的開(kāi)源ShareSDK,結(jié)合項(xiàng)目中的實(shí)際需求,整合出一套分享源碼,版權(quán)所有,如需轉(zhuǎn)載請(qǐng)注明轉(zhuǎn)載地址。

1. 開(kāi)發(fā)環(huán)境及SDK下載

開(kāi)發(fā)工具:Android studio2.1.3版本

ShareSDK:Mob官網(wǎng)(www.mob.com)下載最新社會(huì)化分享ShareSDK2.7.7版本,解壓如圖示

Android一鍵微博分享,Android,微博分享

進(jìn)入ShareSDK for Android文件,找到QuickIntegrater.jar文件,根據(jù)官網(wǎng)介紹雙擊打開(kāi),根據(jù)需求集成第三方平臺(tái),在某些情況如若雙擊無(wú)法打開(kāi),windows系統(tǒng)下,進(jìn)入cmd找到QuickIntegrater.jar所在的當(dāng)前目錄,鍵入java -jar QuickIntegrater.jar,根據(jù)實(shí)際需求集成第三方平臺(tái),最后生成Sample的文件夾,包括需要使用到的libs等文件

Android一鍵微博分享,Android,微博分享

Android一鍵微博分享,Android,微博分享

復(fù)制新生成文件夾Sample下面的全部?jī)?nèi)容到自己所建立的project下,同時(shí)需要對(duì)加入到libs的jar文件添加庫(kù)依賴

Android一鍵微博分享,Android,微博分享

Android一鍵微博分享,Android,微博分享

Mob進(jìn)入后臺(tái),申請(qǐng)分享使用權(quán)限,獲取APP key和APP secret

Android一鍵微博分享,Android,微博分享

將申請(qǐng)到的APP key替換

Android一鍵微博分享,Android,微博分享

2. 配置AndroidManifest.xml

<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"/><!-- 藍(lán)牙分享所需的權(quán)限 --><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

3. 添加必要的activity信息

<activity   android:name="com.mob.tools.MobUIShell"   android:theme="@android:style/Theme.Translucent.NoTitleBar"   android:configChanges="keyboardHidden|orientation|screenSize"   android:screenOrientation="portrait"   android:windowSoftInputMode="stateHidden|adjustResize" ><!-- 調(diào)用新浪原生SDK,需要注冊(cè)的回調(diào)activity -->  <intent-filter>    <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />    <category android:name="android.intent.category.DEFAULT" />  </intent-filter><!--   <intent-filter>     <data android:scheme="tencent100371282" />     <action android:name="android.intent.action.VIEW" />     <category android:name="android.intent.category.BROWSABLE" />     <category android:name="android.intent.category.DEFAULT" />   </intent-filter>-->   </activity><!--微信分享回調(diào) <activity   android:name="cn.sharesdk.demo.wxapi.WXEntryActivity"   android:theme="@android:style/Theme.Translucent.NoTitleBar"   android:configChanges="keyboardHidden|orientation|screenSize"   android:exported="true"   android:screenOrientation="portrait" /> -->

備注:上述代碼中,有關(guān)于微信和QQ的分享回調(diào),本文只講述新浪微博的分享使用,QQ和微信的activity添加可供參考

4. 替換mob后臺(tái)申請(qǐng)的Appkey與各個(gè)平臺(tái)申請(qǐng)的key

更換aseests下面的ShareSDK.xml中的APPkey,以及需要添加第三方應(yīng)用需要的APPkey和AppSecret,以新浪微博為例.

4.1 新浪微博key申請(qǐng)

1)登錄新浪微博,申請(qǐng),填寫賬號(hào),申請(qǐng)注冊(cè)等信息,以個(gè)人為例,在申請(qǐng)結(jié)束后,獲取“微連接”權(quán)限,點(diǎn)擊“立即創(chuàng)建微連接”;

Android一鍵微博分享,Android,微博分享

2)填寫應(yīng)用名稱,勾選應(yīng)用平臺(tái),以Android為例;

Android一鍵微博分享,Android,微博分享

3)確認(rèn)提交即可獲取APP Key和Secret

Android一鍵微博分享,Android,微博分享

4)新浪微博獲取APP的Android包名和簽名

Android一鍵微博分享,Android,微博分享

5)通過(guò)進(jìn)入申請(qǐng)的應(yīng)用名稱“Android實(shí)例”APP下的AndroidManifest.xml中獲取包名;

Android一鍵微博分享,Android,微博分享

6)Android簽名的獲取

通過(guò)4)中新浪微博提供的簽名工具,github下載的“app_signatures.apk”,安裝到手機(jī),同時(shí)將APP“Android實(shí)例”安裝到手機(jī),輸入Android包名,即可生成對(duì)應(yīng)的Android簽名

Android一鍵微博分享,Android,微博分享

Android一鍵微博分享,Android,微博分享

7)新浪微博測(cè)試權(quán)限

需要注意的是,此時(shí)并沒(méi)有對(duì)APP進(jìn)行上線,并沒(méi)有通過(guò)審核,暫時(shí)只有測(cè)試權(quán)限可以關(guān)聯(lián)15個(gè)測(cè)試賬號(hào)使用;

Android一鍵微博分享,Android,微博分享

5. 正式編程

此部分包括一鍵底部彈出對(duì)話框,按鈕操作,第三方分享等操作;

5.1 自定義dialog

參考了多個(gè)博客,總結(jié)出自己所需要的dialog。

/** * Created by user on 2016/10/18. */public class ShareDialog extends Dialog{  private Dialog dialog;  private Context context;  private LayoutInflater inflater;  private ImageView iv_share_sina, iv_share_qqzone, iv_share_wxfriend;  public ShareDialog(Context context){    super(context);    init(context);  }  private void init(Context context){    View view = inflater.from(context).inflate(R.layout.bottom_share_dialog, null);    dialog = new Dialog(context, R.style.shareDialog_style);    dialog.setContentView(view);    RelativeLayout rl_dialog_bg = (RelativeLayout)view.findViewById(R.id.rl_dialog_bg);    rl_dialog_bg.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        dialog.dismiss();      }    });    //設(shè)置鋪滿    Window dialogWindow = dialog.getWindow();    dialogWindow.setGravity(Gravity.BOTTOM);//設(shè)置顯示位置    WindowManager.LayoutParams lp = dialogWindow.getAttributes(); // 獲取對(duì)話框當(dāng)前的參數(shù)值//    lp.x = 0; // 新位置X坐標(biāo)//    lp.y = -20; // 新位置Y坐標(biāo)    lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 寬度   lp.height = WindowManager.LayoutParams.WRAP_CONTENT; // 高度   lp.alpha = 9f; // 透明度    dialogWindow.setAttributes(lp);    /* //設(shè)置鋪滿    Window window = dialog.getWindow();    WindowManager.LayoutParams wl = window.getAttributes();    wl.x = 0;    wl.y = ((Activity) context).getWindowManager().getDefaultDisplay()        .getHeight();    wl.width = ViewGroup.LayoutParams.MATCH_PARENT;    wl.height = ViewGroup.LayoutParams.WRAP_CONTENT;    // 設(shè)置顯示位置    dialog.onWindowAttributesChanged(wl);*/    iv_share_sina = (ImageView) view.findViewById(R.id.iv_share_sina);    iv_share_qqzone = (ImageView) view.findViewById(R.id.iv_share_qqzone);    iv_share_wxfriend = (ImageView) view.findViewById(R.id.iv_share_wxfriend);  }  /**   * 設(shè)置新浪微博監(jiān)聽(tīng)事件   */  public void setSinaClickListener(View.OnClickListener clickListener){    iv_share_sina.setOnClickListener(clickListener);  }  /**   * 設(shè)置QQ空間監(jiān)聽(tīng)事件   */  public void setQQZoneClickListener(View.OnClickListener clickListener){    iv_share_qqzone.setOnClickListener(clickListener);  }  /**   * 設(shè)置微信朋友圈監(jiān)聽(tīng)事件   */  public void setWXFriendClickListener(View.OnClickListener clickListener){    iv_share_wxfriend.setOnClickListener(clickListener);  }  public void show(){    dialog.show();  }  public void dismiss(){    dialog.dismiss();  }}

對(duì)話框如圖示;

Android一鍵微博分享,Android,微博分享

5.2 ShareSDK初始化

在需要activity分享界面,或者在MainActivity的OnCreate()函數(shù)中進(jìn)行初始化

//ShareSDK初始化ShareSDK.initSDK(mActivity);

5.3 獲取和保存當(dāng)前屏幕的截圖,用以第三方的分享

作為第三方分享的一個(gè)點(diǎn),如何將屏幕的截圖,通過(guò)新浪微博一鍵分享到微博中。

/** * 獲取和保存當(dāng)前屏幕的截圖 * 用以第三方分享 */private Bitmap GetandSavaCurrentImage(Activity activity) {  // 1.獲取windows中最頂層的view  View view = activity.getWindow().getDecorView();  view.buildDrawingCache();  // 2.獲取狀態(tài)欄高度  Rect rect = new Rect();  view.getWindowVisibleDisplayFrame(rect);  int statusBarHeights = rect.top;  Display display = activity.getWindowManager().getDefaultDisplay();  // 3.獲取屏幕寬和高  int widths = display.getWidth();  int heights = display.getHeight();  // 4.允許當(dāng)前窗口保存緩存信息  view.setDrawingCacheEnabled(true);  // 5.去掉狀態(tài)欄  Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0,      statusBarHeights, widths, heights - statusBarHeights);  // 銷毀緩存信息  view.destroyDrawingCache();  return bmp;}/** * 將截取的圖片保存到sdcard中并且命名 */private void saveToSD(Bitmap bmp, String fileName) {  //判斷SD卡是否存在  if (hasSdcard()){    Log.i("wzl", "存儲(chǔ)卡存在,可以調(diào)用。");    try {      File file = new File(fileName);      if (!file.exists()){        file.createNewFile();      }      FileOutputStream fos = new FileOutputStream(file);      if (null != fos){        // 第一參數(shù)是圖片格式,第二個(gè)是圖片質(zhì)量,第三個(gè)是輸出流        bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);        // 用完關(guān)閉        fos.flush();        fos.close();      }    } catch (Exception e) {      e.printStackTrace();    }  }}/** * @return 檢查是否存在SDcard */public static boolean hasSdcard(){  String sdcardstate = Environment.getExternalStorageState();  if (sdcardstate.equals(Environment.MEDIA_MOUNTED)) {    //有存儲(chǔ)的SDCard    return true;  } else {    Log.i("wzl", "沒(méi)有檢測(cè)到SDCard!");    return false;  }}

5.4 監(jiān)聽(tīng)事件

點(diǎn)擊新浪微博,直接彈出圖文分享界面,所需要的圖片為對(duì)于當(dāng)前屏幕的截圖,同時(shí)加載自己添加的文字以及網(wǎng)址鏈接,這部分可以作為APP分享的網(wǎng)址下載鏈接,下列代碼也給出了新浪微博分享的一些其他使用案例,可以根據(jù)個(gè)人喜好或者項(xiàng)目的實(shí)際需求進(jìn)行更改;

/** * * 在彈出的9宮格分享頁(yè)面中,會(huì)有很多平臺(tái),如果有些平臺(tái)不希望顯示,可以有兩種方法,  1.刪除項(xiàng)目引用的兩個(gè)工程之一的MainLibs目錄下的libs里面對(duì)應(yīng)的平臺(tái)的jar包,刪除九格宮不要的平臺(tái),只要?jiǎng)h除對(duì)應(yīng)平臺(tái)的jar就行  2.配置ShareSDK.conf文件,不想顯示的平臺(tái)設(shè)置Enable="false" */  /**   * ShareSDK集成方法有兩種   * 1、第一種是引用方式,例如引用onekeyshare項(xiàng)目,onekeyshare項(xiàng)目再引用mainlibs庫(kù)   * 2、第二種是把onekeyshare和mainlibs集成到項(xiàng)目中,本例子就是用第二種方式   請(qǐng)看“ShareSDK   * 使用說(shuō)明文檔”,SDK下載目錄中   或者看網(wǎng)絡(luò)集成文檔   * http://wiki.sharesdk.cn/Android_%E5%BF%AB   * %E9%80%9F%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97   * 3、混淆時(shí),把sample或者本例子的混淆代碼copy過(guò)去,在proguard-project.txt文件中   *   * 平臺(tái)配置信息有三種方式: 1、在我們后臺(tái)配置各個(gè)微博平臺(tái)的key   * 2、在代碼中配置各個(gè)微博平臺(tái)的key,http://sharesdk.cn/androidDoc   * /cn/sharesdk/framework/ShareSDK.html   * 3、在配置文件中配置,本例子里面的assets/ShareSDK.xml,   */  private void showShare() {    //實(shí)例化一個(gè)OnekeyShare對(duì)象    OnekeyShare oks = new OnekeyShare();    // 分享時(shí)Notification的圖標(biāo)和文字 2.5.9以后的版本不調(diào)用此方法    //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));    //關(guān)閉sso授權(quán)    oks.disableSSOWhenAuthorize();    //指定微博平臺(tái),如果不添加這行,則彈出9宮格供用戶選擇    oks.setPlatform(SinaWeibo.NAME);    //分享內(nèi)容的標(biāo)題    // title標(biāo)題,印象筆記、郵箱、信息、微信、人人網(wǎng)和QQ空間使用//    oks.setTitle("新浪微博分享");    // titleUrl是標(biāo)題的對(duì)應(yīng)的網(wǎng)址鏈接,僅在人人網(wǎng)和QQ空間使用,如果沒(méi)有可以不設(shè)置//    oks.setTitleUrl("http://sharesdk.cn");    //分享網(wǎng)絡(luò)圖片,新浪微博分享網(wǎng)絡(luò)圖片需要通過(guò)審核后申請(qǐng)高級(jí)寫入接口,否則請(qǐng)注釋掉測(cè)試新浪微博    //分享網(wǎng)絡(luò)圖片,新浪分享網(wǎng)絡(luò)圖片,需要申請(qǐng)高級(jí)權(quán)限,否則會(huì)報(bào)10014的錯(cuò)誤    //權(quán)限申請(qǐng):新浪開(kāi)放平臺(tái)-你的應(yīng)用中-接口管理-權(quán)限申請(qǐng)-微博高級(jí)寫入接口-statuses/upload_url_text    //注意:本地圖片和網(wǎng)絡(luò)圖片,同時(shí)設(shè)置時(shí),只分享本地圖片    //oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");    oks.setImagePath(fileName);    //是否直接分享(true則直接分享),false是有九格宮,true沒(méi)有    oks.setSilent(false);    //Platform.ShareParams sina_weibo = new Platform.ShareParams();    //sina_weibo.setText("第一次分享" + " " + "www.baidu.com");    //imagePath是圖片的本地路徑,Linked-In以外的平臺(tái)都支持此參數(shù)    //sina_weibo.setImagePath("/sdcard/share_pic.jpg");//確保SDcard下面存在此張圖片    /*oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {      @Override      public void onShare(Platform platform, Platform.ShareParams paramsToShare) {        if(SinaWeibo.NAME.equals(platform.getName())) {          paramsToShare.setText("初始使用" + " " + "http://www.baidu.com");          paramsToShare.setUrl(null);        }      }    });*/    //設(shè)置分享的文本內(nèi)容,所有平臺(tái)都需要這個(gè)字段    oks.setText("新浪微博第一次分享" + " " + "http://www.baidu.com");    //url僅在微信(包括好友和朋友圈)中使用//    oks.setUrl("http://sharesdk.cn");    // comment是我對(duì)這條分享的評(píng)論,僅在人人網(wǎng)和QQ空間使用    //oks.setComment("我是測(cè)試評(píng)論文本");    // site是分享此內(nèi)容的網(wǎng)站名稱,僅在QQ空間使用    //oks.setSite("ShareSDK");    // siteUrl是分享此內(nèi)容的網(wǎng)站地址,僅在QQ空間使用    //oks.setSiteUrl("http://sharesdk.cn");    /*oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {      @Override      public void onShare(Platform platform, Platform.ShareParams paramsToShare) {        if (SinaWeibo.NAME.equals(platform.getName())) {          paramsToShare.setText("分享文本" + " " + "www.baidu.com");          paramsToShare.setUrl(null);        }      }    });*/    oks.setCallback(new PlatformActionListener() {      @Override      public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {        //分享完成        Message msg = new Message();        msg.what = MSG_ACTION_CCALLBACK;        msg.arg1 = 1;        msg.obj = platform;        handler.sendMessage(msg);      }      @Override      public void onError(Platform platform, int i, Throwable throwable) {        //分享失敗        throwable.printStackTrace();        Message msg = new Message();        msg.what = MSG_ACTION_CCALLBACK;        msg.arg1 = 2;        msg.obj = throwable;        handler.sendMessage(msg);      }      @Override      public void onCancel(Platform platform, int i) {        //分享取消        Message msg = new Message();        msg.what = MSG_ACTION_CCALLBACK;        msg.arg1 = 3;        msg.obj = platform;        handler.sendMessage(msg);      }    });    oks.show(mActivity);  }

6. 新浪微博實(shí)例分享

在正確使用shareSDK后,點(diǎn)擊新浪微博的圖形按鈕,會(huì)彈出如下圖的圖文分享框,輸入文字即可完成。

如圖示

Android一鍵微博分享,Android,微博分享

備注:如若分享網(wǎng)址鏈接,必須加上“http://”, 否則分享出去的僅是www.baidu.com

Android一鍵微博分享,Android,微博分享
登錄

Android一鍵微博分享,Android,微博分享
授權(quán)

Android一鍵微博分享,Android,微博分享
分享成功

備注:分享成功后,會(huì)有響應(yīng)提示,需自行添加,登錄新浪微博,即可看到個(gè)人信息中的分享,因?yàn)槲次瓷暇€,因此“來(lái)自未通過(guò)審核應(yīng)用”,當(dāng)點(diǎn)擊“百度”,即可進(jìn)行界面跳轉(zhuǎn)

Android一鍵微博分享,Android,微博分享
成功分享

通過(guò)以上的核心部分的講解,應(yīng)該對(duì)新浪微博的分享有了基本的認(rèn)識(shí)和使用能力。具體的細(xì)節(jié),如如何創(chuàng)建界面,按鈕,查詢沒(méi)有做過(guò)多的講解。如果有需要,可以直接給我發(fā)簡(jiǎn)信,或者留言。

此外,針對(duì)上述的知識(shí)有不明白,異議,亦或是不正確的地方,還請(qǐng)幫忙指正,謝謝。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 含山县| 泰宁县| 措美县| 仙桃市| 策勒县| 洪雅县| 江山市| 龙泉市| 新郑市| 泸溪县| 长岛县| 尚义县| 万州区| 岗巴县| 和硕县| 视频| 鞍山市| 大余县| 潮州市| 大关县| 大冶市| 屏边| 仁布县| 乐陵市| 广丰县| 伊宁县| 仙居县| 陕西省| 龙岩市| 兴业县| 丰原市| 平邑县| 桃园县| 延边| 乌拉特后旗| 台湾省| 黑山县| 布拖县| 宁阳县| 临西县| 阿合奇县|