中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android實現新浪微博一鍵分享的實例代碼

發布時間:2020-10-24 19:02:12 來源:腳本之家 閱讀:188 作者:心若冰清_ 欄目:移動開發

寫在本章前

愈來愈多的APP支持一鍵分享至QQ空間、微信朋友圈、新浪微博的功能,同時支持第三方賬號登錄,如QQ、微信、新浪微博等第三方平臺的賬號。本章結合當下流行的設計,兼顧免費的開源ShareSDK,結合項目中的實際需求,整合出一套分享源碼,版權所有,如需轉載請注明轉載地址。

1. 開發環境及SDK下載

開發工具:Android studio2.1.3版本

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

Android實現新浪微博一鍵分享的實例代碼

進入ShareSDK for Android文件,找到QuickIntegrater.jar文件,根據官網介紹雙擊打開,根據需求集成第三方平臺,在某些情況如若雙擊無法打開,windows系統下,進入cmd找到QuickIntegrater.jar所在的當前目錄,鍵入java -jar QuickIntegrater.jar,根據實際需求集成第三方平臺,最后生成Sample的文件夾,包括需要使用到的libs等文件

Android實現新浪微博一鍵分享的實例代碼

Android實現新浪微博一鍵分享的實例代碼

復制新生成文件夾Sample下面的全部內容到自己所建立的project下,同時需要對加入到libs的jar文件添加庫依賴

Android實現新浪微博一鍵分享的實例代碼

Android實現新浪微博一鍵分享的實例代碼

Mob進入后臺,申請分享使用權限,獲取APP key和APP secret

Android實現新浪微博一鍵分享的實例代碼

將申請到的APP key替換

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"/>
<!-- 藍牙分享所需的權限 -->
<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" >
<!-- 調用新浪原生SDK,需要注冊的回調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>

<!--微信分享回調
 <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" />
 -->

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

4. 替換mob后臺申請的Appkey與各個平臺申請的key

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

4.1 新浪微博key申請

1)登錄新浪微博,申請,填寫賬號,申請注冊等信息,以個人為例,在申請結束后,獲取“微連接”權限,點擊“立即創建微連接”;

Android實現新浪微博一鍵分享的實例代碼

2)填寫應用名稱,勾選應用平臺,以Android為例;

Android實現新浪微博一鍵分享的實例代碼

3)確認提交即可獲取APP Key和Secret

Android實現新浪微博一鍵分享的實例代碼

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

Android實現新浪微博一鍵分享的實例代碼

5)通過進入申請的應用名稱“Android實例”APP下的AndroidManifest.xml中獲取包名;

Android實現新浪微博一鍵分享的實例代碼

6)Android簽名的獲取

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

Android實現新浪微博一鍵分享的實例代碼

Android實現新浪微博一鍵分享的實例代碼

7)新浪微博測試權限

需要注意的是,此時并沒有對APP進行上線,并沒有通過審核,暫時只有測試權限可以關聯15個測試賬號使用;

Android實現新浪微博一鍵分享的實例代碼

5. 正式編程

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

5.1 自定義dialog

參考了多個博客,總結出自己所需要的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();
      }
    });
    //設置鋪滿
    Window dialogWindow = dialog.getWindow();
    dialogWindow.setGravity(Gravity.BOTTOM);//設置顯示位置
    WindowManager.LayoutParams lp = dialogWindow.getAttributes(); // 獲取對話框當前的參數值
//    lp.x = 0; // 新位置X坐標
//    lp.y = -20; // 新位置Y坐標

    lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 寬度
   lp.height = WindowManager.LayoutParams.WRAP_CONTENT; // 高度
   lp.alpha = 9f; // 透明度
    dialogWindow.setAttributes(lp);
    /* //設置鋪滿
    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;
    // 設置顯示位置
    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);
  }

  /**
   * 設置新浪微博監聽事件
   */
  public void setSinaClickListener(View.OnClickListener clickListener){
    iv_share_sina.setOnClickListener(clickListener);
  }
  /**
   * 設置QQ空間監聽事件
   */
  public void setQQZoneClickListener(View.OnClickListener clickListener){
    iv_share_qqzone.setOnClickListener(clickListener);
  }
  /**
   * 設置微信朋友圈監聽事件
   */
  public void setWXFriendClickListener(View.OnClickListener clickListener){
    iv_share_wxfriend.setOnClickListener(clickListener);
  }
  public void show(){
    dialog.show();
  }
  public void dismiss(){
    dialog.dismiss();
  }
}

對話框如圖示;

Android實現新浪微博一鍵分享的實例代碼

5.2 ShareSDK初始化

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

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

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

作為第三方分享的一個點,如何將屏幕的截圖,通過新浪微博一鍵分享到微博中。

/**
 * 獲取和保存當前屏幕的截圖
 * 用以第三方分享
 */
private Bitmap GetandSavaCurrentImage(Activity activity) {
  // 1.獲取windows中最頂層的view
  View view = activity.getWindow().getDecorView();
  view.buildDrawingCache();

  // 2.獲取狀態欄高度
  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.允許當前窗口保存緩存信息
  view.setDrawingCacheEnabled(true);

  // 5.去掉狀態欄
  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", "存儲卡存在,可以調用。");
    try {
      File file = new File(fileName);
      if (!file.exists()){
        file.createNewFile();
      }
      FileOutputStream fos = new FileOutputStream(file);
      if (null != fos){
        // 第一參數是圖片格式,第二個是圖片質量,第三個是輸出流
        bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
        // 用完關閉
        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)) {
    //有存儲的SDCard
    return true;
  } else {
    Log.i("wzl", "沒有檢測到SDCard!");
    return false;
  }
}

5.4 監聽事件

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

/**
 *
 * 在彈出的9宮格分享頁面中,會有很多平臺,如果有些平臺不希望顯示,可以有兩種方法,
  1.刪除項目引用的兩個工程之一的MainLibs目錄下的libs里面對應的平臺的jar包,刪除九格宮不要的平臺,只要刪除對應平臺的jar就行
  2.配置ShareSDK.conf文件,不想顯示的平臺設置Enable="false"
 */
  /**
   * ShareSDK集成方法有兩種

   * 1、第一種是引用方式,例如引用onekeyshare項目,onekeyshare項目再引用mainlibs庫

   * 2、第二種是把onekeyshare和mainlibs集成到項目中,本例子就是用第二種方式
   請看“ShareSDK
   * 使用說明文檔”,SDK下載目錄中
   或者看網絡集成文檔
   * http://wiki.sharesdk.cn/Android_%E5%BF%AB
   * %E9%80%9F%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97
   * 3、混淆時,把sample或者本例子的混淆代碼copy過去,在proguard-project.txt文件中
   *
   * 平臺配置信息有三種方式: 1、在我們后臺配置各個微博平臺的key
   * 2、在代碼中配置各個微博平臺的key,http://sharesdk.cn/androidDoc
   * /cn/sharesdk/framework/ShareSDK.html
   * 3、在配置文件中配置,本例子里面的assets/ShareSDK.xml,
   */

  private void showShare() {
    //實例化一個OnekeyShare對象
    OnekeyShare oks = new OnekeyShare();
    // 分享時Notification的圖標和文字 2.5.9以后的版本不調用此方法
    //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
    //關閉sso授權
    oks.disableSSOWhenAuthorize();
    //指定微博平臺,如果不添加這行,則彈出9宮格供用戶選擇
    oks.setPlatform(SinaWeibo.NAME);
    //分享內容的標題
    // title標題,印象筆記、郵箱、信息、微信、人人網和QQ空間使用
//    oks.setTitle("新浪微博分享");
    // titleUrl是標題的對應的網址鏈接,僅在人人網和QQ空間使用,如果沒有可以不設置
//    oks.setTitleUrl("http://sharesdk.cn");
    //分享網絡圖片,新浪微博分享網絡圖片需要通過審核后申請高級寫入接口,否則請注釋掉測試新浪微博
    //分享網絡圖片,新浪分享網絡圖片,需要申請高級權限,否則會報10014的錯誤
    //權限申請:新浪開放平臺-你的應用中-接口管理-權限申請-微博高級寫入接口-statuses/upload_url_text
    //注意:本地圖片和網絡圖片,同時設置時,只分享本地圖片
    //oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
    oks.setImagePath(fileName);
    //是否直接分享(true則直接分享),false是有九格宮,true沒有
    oks.setSilent(false);
    //Platform.ShareParams sina_weibo = new Platform.ShareParams();
    //sina_weibo.setText("第一次分享" + " " + "www.baidu.com");
    //imagePath是圖片的本地路徑,Linked-In以外的平臺都支持此參數
    //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);
        }
      }
    });*/
    //設置分享的文本內容,所有平臺都需要這個字段
    oks.setText("新浪微博第一次分享" + " " + "http://www.baidu.com");
    //url僅在微信(包括好友和朋友圈)中使用
//    oks.setUrl("http://sharesdk.cn");
    // comment是我對這條分享的評論,僅在人人網和QQ空間使用
    //oks.setComment("我是測試評論文本");
    // site是分享此內容的網站名稱,僅在QQ空間使用
    //oks.setSite("ShareSDK");
    // siteUrl是分享此內容的網站地址,僅在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. 新浪微博實例分享

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

如圖示

Android實現新浪微博一鍵分享的實例代碼

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

Android實現新浪微博一鍵分享的實例代碼
登錄

Android實現新浪微博一鍵分享的實例代碼
授權

Android實現新浪微博一鍵分享的實例代碼
分享成功

備注:分享成功后,會有響應提示,需自行添加,登錄新浪微博,即可看到個人信息中的分享,因為未未上線,因此“來自未通過審核應用”,當點擊“百度”,即可進行界面跳轉

Android實現新浪微博一鍵分享的實例代碼
成功分享

通過以上的核心部分的講解,應該對新浪微博的分享有了基本的認識和使用能力。具體的細節,如如何創建界面,按鈕,查詢沒有做過多的講解。如果有需要,可以直接給我發簡信,或者留言。

此外,針對上述的知識有不明白,異議,亦或是不正確的地方,還請幫忙指正,謝謝。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵寿县| 永登县| 修文县| 铜陵市| 全南县| 靖安县| 汤原县| 虹口区| 白朗县| 师宗县| 如皋市| 敦煌市| 江北区| 晋城| 甘肃省| 张家界市| 清涧县| 亚东县| 平江县| 广元市| 保山市| 夏河县| 五台县| 缙云县| 南通市| 通河县| 建平县| 虹口区| 唐海县| 卢湾区| 白沙| 贵港市| 十堰市| 嘉定区| 门源| 望城县| 兴安县| 五大连池市| 咸丰县| 庐江县| 蛟河市|