微信分享的两个问题

最近在做一个简单的微信分享功能,中间遇到了两个问题:

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呢……


 
 

你可能感兴趣的:(安卓)