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

首頁 > 系統 > Android > 正文

Android應用接入微信分享的實例代碼

2019-10-22 18:32:50
字體:
來源:轉載
供稿:網友

最近項目中要接入微信分享,記錄下接入流程

注冊應用信息并下載必要工具

  1. 在微信開放平臺注冊應用信息
  2. 下載 簽名生成工具獲取待接入應用的簽名
  3. 應用信息填入簽名

注意:由于一般調試簽名和正式簽名不一致,測試時可填入測試包的簽名,上線時需要改為正式包的簽名

接入

在build.gradle中,添加如下依賴:

dependencies {  compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'}

或:

dependencies {  compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'}

其中,前者包含統計功能

AndroidManifest.xml中添加權限和微信回調Activity

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- for mta statistics --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><activity  android:name=".WXEntryActivity"  android:exported="true"  android:screenOrientation="portrait"  android:theme="@style/AppTheme.Fullscreen.Translucent"/>

這里使用了一個透明的Activity來處理微信分享結果回調

主題:

<style name="AppTheme.Fullscreen" parent="Theme.AppCompat.NoActionBar">  <item name="android:windowNoTitle">true</item>  <item name="android:windowFullscreen">true</item>  <item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item></style><style name="AppTheme.Fullscreen.Translucent">  <item name="android:windowBackground">@android:color/transparent</item>  <item name="android:windowIsTranslucent">true</item>  <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item></style>

Activity

當微信分享成功,點擊返回App時,微信會主動調用WXEntryActivity,并將結果通過Intent傳給WXEntryActivity,此時調用api.handleIntent(getIntent(), this)對結果進行處理,handleIntent第二個參數為IWXAPIEventHandler,分享結果會在onResp方法中處理,在這里我們發送一個廣播,并在WXShare對象中對該廣播進行監聽

public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {    private IWXAPI api;    @Override    protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      Logger.i("WXEntryActivity");      WXShare share = new WXShare(this);      api = share  //        .register()          .getApi();      //注意:      //第三方開發者如果使用透明界面來實現WXEntryActivity,需要判斷handleIntent的返回值,如果返回值為false,則說明入參不合法未被SDK處理,應finish當前透明界面,避免外部通過傳遞非法參數的Intent導致停留在透明界面,引起用戶的疑惑      try {        if (!api.handleIntent(getIntent(), this)) {          finish();        }      } catch (Exception e) {        e.printStackTrace();      }    }    @Override    protected void onNewIntent(Intent intent) {      super.onNewIntent(intent);      Logger.i("onNewIntent");      setIntent(intent);      if (!api.handleIntent(intent, this)) {        finish();      }    }    @Override    public void onReq(BaseReq baseReq) {    }    @Override    public void onResp(BaseResp baseResp) {      Intent intent = new Intent(WXShare.ACTION_SHARE_RESPONSE);      intent.putExtra(WXShare.EXTRA_RESULT, new WXShare.Response(baseResp));      sendBroadcast(intent);      finish();    }  }

工具類

public class WXShare {    public static final String APP_ID = "wx0123456789";    public static final String ACTION_SHARE_RESPONSE = "action_wx_share_response";    public static final String EXTRA_RESULT = "result";    private final Context context;    private final IWXAPI api;    private OnResponseListener listener;    private ResponseReceiver receiver;    public WXShare(Context context) {      api = WXAPIFactory.createWXAPI(context, APP_ID);      this.context = context;    }    public WXShare register() {      // 微信分享      api.registerApp(APP_ID);      receiver = new ResponseReceiver();      IntentFilter filter = new IntentFilter(ACTION_SHARE_RESPONSE);      context.registerReceiver(receiver, filter);      return this;    }    public void unregister() {      try {        api.unregisterApp();        context.unregisterReceiver(receiver);      } catch (Exception e) {        e.printStackTrace();      }    }    public WXShare share(String text) {      WXTextObject textObj = new WXTextObject();      textObj.text = text;      WXMediaMessage msg = new WXMediaMessage();      msg.mediaObject = textObj;  //    msg.title = "Will be ignored";      msg.description = text;      SendMessageToWX.Req req = new SendMessageToWX.Req();      req.transaction = buildTransaction("text");      req.message = msg;      req.scene = SendMessageToWX.Req.WXSceneSession;      boolean result = api.sendReq(req);      Logger.i("text shared: " + result);      return this;    }    public IWXAPI getApi() {      return api;    }    public void setListener(OnResponseListener listener) {      this.listener = listener;    }    private String buildTransaction(final String type) {      return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();    }    private class ResponseReceiver extends BroadcastReceiver {      @Override      public void onReceive(Context context, Intent intent) {        Response response = intent.getParcelableExtra(EXTRA_RESULT);        Logger.d("type: " + response.getType());        Logger.d("errCode: " + response.errCode);        String result;        if (listener != null) {          if (response.errCode == BaseResp.ErrCode.ERR_OK) {            listener.onSuccess();          } else if (response.errCode == BaseResp.ErrCode.ERR_USER_CANCEL) {            listener.onCancel();          } else {            switch (response.errCode) {              case BaseResp.ErrCode.ERR_AUTH_DENIED:                result = "發送被拒絕";                break;              case BaseResp.ErrCode.ERR_UNSUPPORT:                result = "不支持錯誤";                break;              default:                result = "發送返回";                break;            }            listener.onFail(result);          }        }      }    }    public static class Response extends BaseResp implements Parcelable {      public int errCode;      public String errStr;      public String transaction;      public String openId;      private int type;      private boolean checkResult;      public Response(BaseResp baseResp) {        errCode = baseResp.errCode;        errStr = baseResp.errStr;        transaction = baseResp.transaction;        openId = baseResp.openId;        type = baseResp.getType();        checkResult = baseResp.checkArgs();      }      @Override      public int getType() {        return type;      }      @Override      public boolean checkArgs() {        return checkResult;      }      @Override      public int describeContents() {        return 0;      }      @Override      public void writeToParcel(Parcel dest, int flags) {        dest.writeInt(this.errCode);        dest.writeString(this.errStr);        dest.writeString(this.transaction);        dest.writeString(this.openId);        dest.writeInt(this.type);        dest.writeByte(this.checkResult ? (byte) 1 : (byte) 0);      }      protected Response(Parcel in) {        this.errCode = in.readInt();        this.errStr = in.readString();        this.transaction = in.readString();        this.openId = in.readString();        this.type = in.readInt();        this.checkResult = in.readByte() != 0;      }      public static final Creator<Response> CREATOR = new Creator<Response>() {        @Override        public Response createFromParcel(Parcel source) {          return new Response(source);        }        @Override        public Response[] newArray(int size) {          return new Response[size];        }      };    }  }

接口

public interface OnResponseListener {  void onSuccess();  void onCancel();  void onFail(String message);}

使用

在需要使用微信分享的Activity中:

@Overrideprotected void onCreate(Bundle savedInstanceState) {  wxShare = new WXShare(this);  wxShare.setListener(new OnResponseListener() {    @Override    public void onSuccess() {      // 分享成功    }    @Override    public void onCancel() {      // 分享取消    }    @Override    public void onFail(String message) {      // 分享失敗    }  });}@Overrideprotected void onStart() {  super.onStart();  wxShare.register();}@Overrideprotected void onDestroy() {  wxShare.unregister();  super.onDestroy();}

啟動分享

wxShare.share("這是要分享的文字");

到這里微信分享就完成啦!

另外,在微信官方例程中,有個定時刷新應用注冊信息的receiver

AndroidManifest.xml中添加:

<receiver  android:name=".AppRegister"  android:permission="com.tencent.mm.plugin.permission.SEND">  <intent-filter>    <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP"/>  </intent-filter></receiver>

代碼:

public class AppRegister extends BroadcastReceiver {  @Override  public void onReceive(Context context, Intent intent) {    final IWXAPI api = WXAPIFactory.createWXAPI(context, null);    // 將該app注冊到微信    api.registerApp(WXShare.APP_ID);  }}

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阆中市| 龙江县| 漳平市| 广灵县| 平顶山市| 嘉义市| 台北市| 河源市| 乌鲁木齐县| 临沂市| 甘南县| 洛宁县| 高淳县| 新郑市| 建阳市| 沾化县| 常山县| 高平市| 永寿县| 湖南省| 长海县| 黄梅县| 周至县| 温州市| 广西| 上思县| 博客| 宜兴市| 象山县| 左权县| 阜城县| 昌江| 乐昌市| 南漳县| 宜丰县| 桓仁| 英山县| 合山市| 安塞县| 龙井市| 宁远县|