写在前面的话
应用要接入微信登录,分享,需要在微信的开发者平台上进行提交应用,并且审核通过,应用已经获取到appId。
相关jar包下载地址:http://download.csdn.net/detail/sapce_fish/9571142
也可到官网下载:https://open.weixin.qq.com
将 libammsdk.jar 引进自己的项目中
第一步:在Manifest中进行如下配置:
<!-- 微信登录相关权限 开始 -->
<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" />
<!-- 微信登录相关权限 结束 -->
<!-- 微信登录相关配置 开始 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 微信登录相关配置 结束 -->
第二步:写微信回调,这个需要特别注意,因为微信对这个回调类有特殊的要求
注意点:
1.位置:回调Activity的位置在包名的wxapi下。例如:包名为aaa.bbb.ccc 那么回调Activity的位置则应在aaa.bbb.ccc.wxapi下
2.Activity名:回调Activity名字必须为WXEntryActivity。此Activity继承自Activity,这也跟上面在Manifest文件中配置的那个Activity对应上了。
3.Activity实现IWXAPIEventHandler接口。
微信回调Activity(这个回调Activity比较容易写错,我就全部贴出来,如有需要可以参考)
public class WXEntryActivity extends Activity implements IWXAPIEventHandler
{
private IWXAPI api;
/** 标记是否有code,默认为有,当调用登录微信授权方法后此值会被设置成false*/
public static boolean mHaveCode = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, AppConstants.APP_ID_WX, false);
api.handleIntent(getIntent(), this);
}
/**
* 微信发送的请求将回调到onReq方法
*/
@Override
public void onReq(BaseReq req) {
Log.d("space", req.toString());
finish();
}
/**
* 发送到微信请求的响应结果将回调到onResp方法
*/
@Override
public void onResp(BaseResp resp) {
Log.i("space",resp.toString());
String result = "";
if (resp != null && !mHaveCode && ((SendAuth.Resp) resp).code != null) {
// mResp = resp;
mHaveCode = true;
//设置好微信code
getWXCode(resp);
}
Log.i("space", "WXEntryActivity resp.errCode="+resp.errCode);
switch(resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result ="成功";
JsCallbackExecutor.onSocialWXOptionResult(resp.errCode, "code is weixin sdk back ,ref status" + result);
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "取消";
JsCallbackExecutor.onSocialWXOptionResult(resp.errCode, "code is weixin sdk back ,ref status" + result);
Log.i("space", result);
finish();