申请微信开放平台帐号 申请本身的AppID
地址
准备开发资源java
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
// APP_ID 替换为你的应用从官方网站申请到的合法appID private static final String APP_ID = "wx88888888"; // IWXAPI 是第三方app和微信通讯的openApi接口 private IWXAPI api; private regToWx() { // 经过WXAPIFactory工厂,获取IWXAPI的实例 api = WXAPIFactory.createWXAPI(this, APP_ID, true); // 将应用的appId注册到微信 api.registerApp(APP_ID); }
boolean sendReq(BaseReq req);android
sendReq是第三方app主动发送消息给微信,发送完成以后会切回到第三方app界面。web
boolean sendResp(BaseResp resp);canvas
sendResp是微信向第三方app请求数据,第三方app回应数据以后会切回到微信界面。api
sendReq的实现示例,以下图所示:微信
/初始化一个 WXTextObject 对象,填写分享的文本内容 WXTextObject textObj = new WXTextObject(); textObj.text = text; //用 WXTextObject 对象初始化一个 WXMediaMessage 对象 WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = textObj; msg.description = text; SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = String.valueOf(System.currentTimeMillis()); //transaction字段用与惟一标示一个请求 req.message = msg; req.scene = mTargetScene; //调用api接口,发送数据到微信 api.sendReq(req);
scene 字段 int类型常量,表明消息发送的目的
文档中给定的常量
分享到对话:
SendMessageToWX.Req.WXSceneSession
分享到朋友圈:
SendMessageToWX.Req.WXSceneTimeline ;
分享到收藏:
SendMessageToWX.Req.WXSceneFavoriteapp
报错 checkArgs fail, thumbData is invalid
缘由,WXWebpageObject .userOpenId ,网页缩略图,要求大小在32K如下
原有的方法
Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb)
常常超标
本身控制下缩略图大小ide
Bitmap thumbBmp = Bitmap.createScaledBitmap(getBitmap(context,R.drawable.page_title),120,120,true); // 因为一部分图像资源是svg,须要对5.0以上的系统作兼容 private Bitmap getBitmap(Context context,int vectorDrawableId) { Bitmap bitmap = null; if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { Drawable vectorDrawable = context.getDrawable(vectorDrawableId); bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); vectorDrawable.draw(canvas); } else { bitmap = BitmapFactory.decodeResource(context.getResources(), vectorDrawableId,new BitmapFactory.Options()); } return bitmap; }
<activity android:name=".wxapi.WXEntryActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="true" android:taskAffinity="net.sourceforge.simcpux" android:launchMode="singleTask"> </activity>
2.实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
记得在处理完操做后,finish()当前活动
3. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法
须要在onCreate()和onNewIntent()中实现svg
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); api = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID,false); // api.registerApp(WEIXIN_APP_ID); api.handleIntent(getIntent(),this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent,this); }
版本的适配
分享到朋友圈,须要微信4.2版本以上工具
if (api.getWXAppSupportAPI() >= Build.TIMELINE_SUPPORTED_SDK_INT) { //do share }
另外须要判断是否安装微信
资料来源
/ 检查是否安装微信 public boolean isWeChatAppInstalled(Context context) { if(api.isWXAppInstalled()) { return true; } else { final PackageManager packageManager = context.getPackageManager();// 获取packagemanager 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.equalsIgnoreCase("com.tencent.mm")) { return true; } } } return false; } }
// 检查读取本机状态的权限 private void checkPhoneState() { int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 0); } }
6.72微信更新后,分享回调,cancel和success事件变成一个结果
回调方法onResp(BaseResp baseResp) 返回的baseResp.errCode,不会出现BaseResp.ErrCode.ERR_USER_CANCEL,只会返回BaseResp.ErrCode.ERR_OK(0)
微信更新连接