最近在做一个简单的微信分享功能,中间遇到了两个问题:
1.微信回调问题:
要想获取微信分享的结果,必须在自己的项目下新建包名wxapi,新建WXEntryActivity(名字必须是这个)实现IWXAPIEventHandler接口,重写onResop()方法。如下:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
...
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entry); // 通过WXAPIFactory工厂,获取IWXAPI的实例 api = WXAPIFactory.createWXAPI(this, Constants.APP_ID); api.handleIntent(getIntent(), this); }
@Override public void onReq(BaseReq req) { }
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 @Override public void onResp(BaseResp resp) {
}
微信会自动回调onResop()方法。微信demo里的代码是这样的:
public void onResp(BaseResp resp) { int result = 0; switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: result = R.string.errcode_success; break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = R.string.errcode_cancel; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = R.string.errcode_deny; break; default: result = R.string.errcode_unknown; break; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); finish(); }
然而手贱的我在switch{}前面加了两行log打印,虽然会执行方法,但是log打印完就不往下执行,直接跳到onCreate()中的api.handleIntent(getIntent(), this)这行。
最后把那两行打印删除之后就好了。
什么原因我也不太清楚,还请知道的大神帮我解答一下……
2.在app的activity中点击分享给好友调出微信好友选择界面后直接点击返回键导致app刚才所处的那个activity也被finish。
这个发现是back键的ACTION-UP事件传递到了app的activity中,结果就悲剧了……
我们可以在这个activity中重写onKeyUp()方法:
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { return true; }
以上两个问题是我在做的时候遇到的,写下来以防自己以后再遇到这些问题,也希望能帮助到一些小伙伴。
如果有知道出现这两个问题原因或者有更好解决办法的大神,还请不吝指教!谢谢!
———————————————————————————————————————————————————
分割线
———————————————————————————————————————————————————
之前没有管过这个,偶然发现的,在分享时有一个生成唯一标识的方法,刚开始也不了解这个有什么用,如下:
private String buildTransaction(final String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); }在分享时会调用这个方法,将返回值作为 SendMessageToWX.Req对象req的一个属性值,即:
req.transaction = buildTransaction("text");
后来才知道,这个标识text和WXEntryActivity的onResp(BaseResp resp)方法中的resp对象中的transaction属性值是对应的:
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
int result = 0;
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = R.string.errcode_success;
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = R.string.errcode_cancel;
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = R.string.errcode_deny;
break;
default:
result = R.string.errcode_unknown;
break;
}
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
Log.i("transaction", resp.transaction);
} }
打印出来的值即是之前设置的text+用户点击分享时所对应时间的毫秒数。
——————————————————————————————————————————————————
20160822
后来又发现了一个微信分享的问题。
由于分享到朋友圈的操作要微信4.2以后的版本才支持,所以在分享前会做微信版本的检查。但是在安卓6.0系统上,会获取不到正确的版本号(获取到的好像是0吧)。我自己在写的时候遇到了这个问题,然后在大众点评上偶然也发现了这个问题(大众点评应该用的JS_SDK)。不知道这是不是微信分享的一个bug呢……