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

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

Android 實(shí)現(xiàn)微信,微博,微信朋友圈,QQ分享的功能

2019-12-12 04:19:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Android 實(shí)現(xiàn)微信,微博,微信朋友圈,QQ分享的功能

一、去各自所在的開發(fā)者平臺(tái)注冊(cè)相應(yīng)的Key值;引入相關(guān)jar包、權(quán)限等

二、ShareUtil工具類

import android.app.Activity;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import com.sina.weibo.sdk.api.ImageObject;import com.sina.weibo.sdk.api.TextObject;import com.sina.weibo.sdk.api.WeiboMultiMessage;import com.sina.weibo.sdk.api.share.IWeiboShareAPI;import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;import com.sina.weibo.sdk.api.share.WeiboShareSDK;import com.sina.weibo.sdk.auth.AuthInfo;import com.sina.weibo.sdk.auth.Oauth2AccessToken;import com.sina.weibo.sdk.auth.WeiboAuthListener;import com.sina.weibo.sdk.exception.WeiboException;import com.tencent.connect.share.QQShare;import com.tencent.mm.sdk.modelmsg.SendMessageToWX;import com.tencent.mm.sdk.modelmsg.WXMediaMessage;import com.tencent.mm.sdk.modelmsg.WXWebpageObject;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.WXAPIFactory;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import java.util.List;import cn.hnshangyu.maker.R;import cn.hnshangyu.maker.weibo.AccessTokenKeeper;import cn.hnshangyu.maker.weibo.Constants;/** * ============================================ * 文件名:ShareUtil.java * 日期:2016-08-17 14:58 * 描述:分享幫助類 * 版本:1.0 *  * ============================================ */public class ShareUtil {  /**   * 微博微博分享接口實(shí)例   */  public static IWeiboShareAPI mWeiboShareAPI;  //微信分享  public static final String WEIXIN_SHARE_APP_ID = "wx0c********88488d";  public static IWXAPI weixin_api;  public static final String QQ_APP_ID = "11****5659";  public static Tencent mTencent;  public static void shareQQ(Activity activity, String sharePath, IUiListener listener) {    //qq分享    mTencent = Tencent.createInstance(QQ_APP_ID, activity);    if (isQQClientAvailable(activity)) {//      String content = activity.getResources().getString(R.string.ivQrcode_content);      final Bundle params = new Bundle();      params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);      params.putString(QQShare.SHARE_TO_QQ_TITLE, "######");      params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "#############...");      params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, sharePath);//      params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "https://www.baidu.com/img/bd_logo1.png");      mTencent.shareToQQ(activity, params, listener);    } else {      UIUtils.showToast(activity, "請(qǐng)檢查是否安裝最新版QQ!");    }  }  /**   * 判斷qq是否可用   *   * @param context   * @return   */  private static boolean isQQClientAvailable(Context context) {    final PackageManager packageManager = context.getPackageManager();    List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);    if (pinfo != null) {      for (int i = 0; i < pinfo.size(); i++) {        String pn = pinfo.get(i).packageName;        if (pn.equals("com.tencent.mobileqq")) {          return true;        }      }    }    //**如果返回false qq的輕聊版也會(huì)顯示安裝新版本,true他會(huì)自動(dòng)下載新版本    return true;  }  public static void shareWeiBo(final Activity activity, String sharePath) {    //微博    mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(activity, Constants.APP_KEY);    // 1. 初始化微博的分享消息    WeiboMultiMessage weiboMessage = new WeiboMultiMessage();    weiboMessage.mediaObject = getImageObj(activity);    weiboMessage.textObject = getTextObj(activity, sharePath);    SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();    // 用transaction唯一標(biāo)識(shí)一個(gè)請(qǐng)求    request.transaction = String.valueOf(System.currentTimeMillis());    request.multiMessage = weiboMessage;    if (mWeiboShareAPI.isWeiboAppInstalled() && mWeiboShareAPI.isWeiboAppSupportAPI()) {      mWeiboShareAPI.registerApp();  // 將應(yīng)用注冊(cè)到微博客戶端      // 3. 發(fā)送請(qǐng)求消息到微博,喚起微博分享界面      mWeiboShareAPI.sendRequest(activity, request);    } else {      AuthInfo mAuthInfo = new AuthInfo(activity, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);      Oauth2AccessToken accessToken = AccessTokenKeeper.readAccessToken(activity);      String token = "";      if (accessToken != null) {        token = accessToken.getToken();      }      mWeiboShareAPI.sendRequest(activity, request, mAuthInfo, token, new WeiboAuthListener() {        @Override        public void onComplete(Bundle bundle) {          Oauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle);          AccessTokenKeeper.writeAccessToken(activity, newToken);          UIUtils.showToast(activity, "onAuthorizeComplete token = " + newToken.getToken());        }        @Override        public void onWeiboException(WeiboException e) {          UIUtils.showToast(activity, "分享出錯(cuò)");        }        @Override        public void onCancel() {          UIUtils.showToast(activity, "分享取消");        }      });    }  }  private static TextObject getTextObj(Activity activity, String sharePath) {    TextObject textObject = new TextObject();    textObject.text = "##################...@" + sharePath;    Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.mipmap.ic_launcher);    textObject.setThumbImage(bitmap);    return textObject;  }  /**   * 創(chuàng)建圖片消息對(duì)象。   *   * @return 圖片消息對(duì)象。   */  private static ImageObject getImageObj(Activity activity) {    ImageObject imageObject = new ImageObject();//    BitmapDrawable bitmapDrawable = (BitmapDrawable) mImageView.getDrawable();    //設(shè)置縮略圖。 注意:最終壓縮過(guò)的縮略圖大小不得超過(guò) 32kb。    Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.mipmap.ic_launcher);    imageObject.setImageObject(bitmap);    return imageObject;  }  static SendMessageToWX.Req req;  private static final int THUMB_SIZE = 150;  public static void shareWechatCircle(Activity activity, String sharePath) {    if (linkWeiXin(activity, sharePath)) {      req.scene = SendMessageToWX.Req.WXSceneTimeline;      weixin_api.sendReq(req);    }  }  public static void shareWechat(Activity activity, String sharePath) {    if (linkWeiXin(activity, sharePath)) {      req.scene = SendMessageToWX.Req.WXSceneSession;      weixin_api.sendReq(req);    }  }  //微信分享  private static boolean linkWeiXin(Activity activity, String sharePath) {    // 通過(guò)WXAPIFactory工廠,獲取IWXAPI的實(shí)例    weixin_api = WXAPIFactory.createWXAPI(activity, WEIXIN_SHARE_APP_ID, true);    if (weixin_api.isWXAppInstalled() && weixin_api.isWXAppSupportAPI()) {      weixin_api.registerApp(WEIXIN_SHARE_APP_ID);      WXWebpageObject webpageObject = new WXWebpageObject();      webpageObject.webpageUrl = sharePath;      WXMediaMessage msg = new WXMediaMessage();      msg.mediaObject = webpageObject;      Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), R.mipmap.ic_launcher);      msg.setThumbImage(bitmap);      msg.title = "######";      msg.description = "###################...";      req = new SendMessageToWX.Req();      req.transaction = buildTransaction("webpage");      req.message = msg;      return true;    } else {      UIUtils.showToast(activity, "請(qǐng)檢查是否安裝最新版微信!");      return false;    }  }  private static String buildTransaction(final String type) {    return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();  }}

三、分享界面

import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.View;import android.widget.ImageView;import com.google.zxing.WriterException;import com.sina.weibo.sdk.api.share.BaseResponse;import com.sina.weibo.sdk.api.share.IWeiboHandler;import com.sina.weibo.sdk.api.share.IWeiboShareAPI;import com.sina.weibo.sdk.api.share.WeiboShareSDK;import com.sina.weibo.sdk.constant.WBConstants;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import com.tencent.tauth.UiError;import butterknife.BindView;import cn.hnshangyu.maker.R;import cn.hnshangyu.maker.base.BaseActivity;import cn.hnshangyu.maker.ui.personal.zxing.EncodingHandler;import cn.hnshangyu.maker.util.ShareUtil;import cn.hnshangyu.maker.util.UIUtils;import cn.hnshangyu.maker.weibo.Constants;public class InviteFriendsActivity extends BaseActivity implements IWeiboHandler.Response {  @BindView(R.id.iv_qrcode)  ImageView ivQrcode;  @BindView(R.id.iv_share_qq)  ImageView ivShareQq;  @BindView(R.id.iv_share_weibo)  ImageView ivShareWeibo;  @BindView(R.id.iv_share_weixin)  ImageView ivShareWeixin;  @BindView(R.id.iv_share_circle_friends)  ImageView ivShareCircleFriends;  private Bitmap qrcodeBitmap;  /**   * 微博微博分享接口實(shí)例   */  private IWeiboShareAPI mWeiboShareAPI = null;  //分享鏈接  private String sharePath;  @Override  protected int getLayoutId() {    return R.layout.activity_invite_friends;  }  @Override  protected void onNewIntent(Intent intent) {    super.onNewIntent(intent);    // 從當(dāng)前應(yīng)用喚起微博并進(jìn)行分享后,返回到當(dāng)前應(yīng)用時(shí),需要在此處調(diào)用該函數(shù)    // 來(lái)接收微博客戶端返回的數(shù)據(jù);執(zhí)行成功,返回 true,并調(diào)用    // {@link IWeiboHandler.Response#onResponse};失敗返回 false,不調(diào)用上述回調(diào)    mWeiboShareAPI.handleWeiboResponse(intent, this);  }  /**   * 初始化控件(必須實(shí)現(xiàn)此方法)   */  @Override  protected void initView() {    sharePath = getResources().getString(R.string.ivQrcode_content);    onShowTopBack(false);    onShowTitleBack(true);    setTitleText(R.string.invite_friends);    showQRCode();    // 創(chuàng)建微博分享接口實(shí)例    mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);    // 注冊(cè)第三方應(yīng)用到微博客戶端中,注冊(cè)成功后該應(yīng)用將顯示在微博的應(yīng)用列表中。    // 但該附件欄集成分享權(quán)限需要合作申請(qǐng),詳情請(qǐng)查看 Demo 提示    // NOTE:請(qǐng)務(wù)必提前注冊(cè),即界面初始化的時(shí)候或是應(yīng)用程序初始化時(shí),進(jìn)行注冊(cè)    mWeiboShareAPI.registerApp();    initListener();  }  @Override  protected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    // 當(dāng) Activity 被重新初始化時(shí)(該 Activity 處于后臺(tái)時(shí),可能會(huì)由于內(nèi)存不足被殺掉了),    // 需要調(diào)用 {@link IWeiboShareAPI#handleWeiboResponse} 來(lái)接收微博客戶端返回的數(shù)據(jù)。    // 執(zhí)行成功,返回 true,并調(diào)用 {@link IWeiboHandler.Response#onResponse};    // 失敗返回 false,不調(diào)用上述回調(diào)    if (savedInstanceState != null) {      mWeiboShareAPI.handleWeiboResponse(getIntent(), this);    }  }  private void showQRCode() {    //生成二維碼圖片,第一個(gè)參數(shù)是二維碼的內(nèi)容,第二個(gè)參數(shù)是正方形圖片的邊長(zhǎng),單位是像素//    String content = "http://m.360buyimg.com/mobilecms/s300x98_jfs/t1363/77/1381395719/60705/ce91ad5c/55dd271aN49efd216.jpg";//    content = getResources().getString(R.string.ivQrcode_content);    try {      qrcodeBitmap = EncodingHandler.createQRCode(sharePath, 400);      ivQrcode.setImageBitmap(qrcodeBitmap);    } catch (WriterException e) {      e.printStackTrace();    }  }  private void initListener() {    ivShareQq.setOnClickListener(this);    ivShareWeibo.setOnClickListener(this);    ivShareWeixin.setOnClickListener(this);    ivShareCircleFriends.setOnClickListener(this);  }  @Override  protected void onInitClick(View v) {    super.onInitClick(v);    switch (v.getId()) {      case R.id.iv_share_qq:        ShareUtil.shareQQ(mActivity, sharePath, shareListener);        break;      case R.id.iv_share_weibo:        ShareUtil.shareWeiBo(mActivity, sharePath);        break;      case R.id.iv_share_weixin:        ShareUtil.shareWechat(mActivity, sharePath);        break;      case R.id.iv_share_circle_friends:        ShareUtil.shareWechatCircle(mActivity, sharePath);        break;    }  }  @Override  public void onResponse(BaseResponse baseResponse) {    if (baseResponse != null) {      switch (baseResponse.errCode) {        case WBConstants.ErrorCode.ERR_OK:          UIUtils.showToast(mContext, "分享成功");          break;        case WBConstants.ErrorCode.ERR_CANCEL:          UIUtils.showToast(mContext, "分享取消");          break;        case WBConstants.ErrorCode.ERR_FAIL:          UIUtils.showToast(mContext, "分享失敗");          break;      }    }  }  private IUiListener shareListener = new IUiListener() {    @Override    public void onComplete(Object o) {      UIUtils.showToast(mContext, "分享成功");    }    @Override    public void onError(UiError uiError) {      UIUtils.showToast(mContext, "分享出錯(cuò)");    }    @Override    public void onCancel() {    }  };  protected void onActivityResult(int requestCode, int resultCode, Intent data) {    if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE) {      Tencent.onActivityResultData(requestCode, resultCode, data, shareListener);    }  }}

四、Constants類

/** * 該類定義了微博授權(quán)時(shí)所需要的參數(shù)。 */public interface Constants {  /**   * 當(dāng)前 應(yīng)用的 APP_KEY,第三方應(yīng)用應(yīng)該使用自己的 APP_KEY 替換該 APP_KEY   */  public static final String APP_KEY = "16#####007";  /**   * 當(dāng)前 應(yīng)用的回調(diào)頁(yè),第三方應(yīng)用可以使用自己的回調(diào)頁(yè)。   * <p/>   * <p>   * 注:關(guān)于授權(quán)回調(diào)頁(yè)對(duì)移動(dòng)客戶端應(yīng)用來(lái)說(shuō)對(duì)用戶是不可見的,所以定義為何種形式都將不影響,   * 但是沒(méi)有定義將無(wú)法使用 SDK 認(rèn)證登錄。   * 建議使用默認(rèn)回調(diào)頁(yè):https://api.weibo.com/oauth2/default.html   * </p>   *///  public static final String REDIRECT_URL = "http://www.sina.com";  public static final String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";  /**   * Scope 是 OAuth2.0 授權(quán)機(jī)制中 authorize 接口的一個(gè)參數(shù)。通過(guò) Scope,平臺(tái)將開放更多的微博   * 核心功能給開發(fā)者,同時(shí)也加強(qiáng)用戶隱私保護(hù),提升了用戶體驗(yàn),用戶在新 OAuth2.0 授權(quán)頁(yè)中有權(quán)利   * 選擇賦予應(yīng)用的功能。   * <p/>   * 我們通過(guò)新浪微博開放平臺(tái)-->管理中心-->我的應(yīng)用-->接口管理處,能看到我們目前已有哪些接口的   * 使用權(quán)限,高級(jí)權(quán)限需要進(jìn)行申請(qǐng)。   * <p/>   * 目前 Scope 支持傳入多個(gè) Scope 權(quán)限,用逗號(hào)分隔。   * <p/>   * 有關(guān)哪些 OpenAPI 需要權(quán)限申請(qǐng),請(qǐng)查看:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI   * 關(guān)于 Scope 概念及注意事項(xiàng),請(qǐng)查看:http://open.weibo.com/wiki/Scope   */  public static final String SCOPE =      "email,direct_messages_read,direct_messages_write,"          + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"          + "follow_app_official_microblog," + "invitation_write";}

 感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌拉特中旗| 仲巴县| 怀化市| 衡山县| 安吉县| 辛集市| 临洮县| 雅江县| 历史| 辽宁省| 临汾市| 会理县| 延安市| 凤庆县| 德保县| 额尔古纳市| 绥滨县| 玛沁县| 丹东市| 安龙县| SHOW| 寻乌县| 邵东县| 登封市| 甘德县| 延长县| 成武县| 南昌市| 阿城市| 元朗区| 育儿| 曲沃县| 西昌市| 临朐县| 黎城县| 临澧县| 临澧县| 马关县| 博乐市| 宜川县| 民县|