首先是微信登陆。
直接上代码
在点击登陆时候
public class LandActivity extends Activity {
private Button land;
private LinearLayout skip;
private IWXAPI api;
private Handler handler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_land);
api= WXAPIFactory.createWXAPI(LandActivity.this,"wx9433d9bf10c7a032",true);
init();
}
public void init(){
land= (Button) findViewById(R.id.land);//登陆
land.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences=getSharedPreferences("landingwx", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("landingwx","oneland");
editor.commit();
api.registerApp("wx9433d9bf10c7a032");
SendAuth.Req req = new SendAuth.Req();
//授权读取用户信息
req.scope = "snsapi_userinfo";
//自定义信息
req.state = "beoka";
//向微信发送请求
api.sendReq(req);
handler.postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
},20000);
}
});
这个其实就可以调取登陆了,但是我们还要请求接口才行 。
请求接口 我放到回调里面说、
接下来是我们这个分享
public class AboutActivity extends Activity {
private ImageView about_b;
private ImageView about_update;
private TextView share;
private IWXAPI api;
private int modelIndex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
api= WXAPIFactory.createWXAPI(AboutActivity.this,"wx9433d9bf10c7a032",true);
api.registerApp("wx9433d9bf10c7a032");
about_b= (ImageView) findViewById(R.id.about_b);
about_b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
about_update= (ImageView) findViewById(R.id.about_update);
about_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast toast=Toast.makeText(AboutActivity.this,"已是最新版本",Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
});
share= (TextView) findViewById(R.id.share);
share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Dialog();
}
});
}
private void share2weixin(int flag) {
if (!api.isWXAppInstalled()) {
Toast.makeText(AboutActivity.this, "您还未安装微信客户端",
Toast.LENGTH_SHORT).show();
return;
}
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = "http://mp.weixin.qq.com/s/ObyplzD9MQJ1OcXATN64hQ";
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "头部按摩器";
msg.description = "四川千里倍益康";
Bitmap thumb = BitmapFactory.decodeResource(getResources(),
R.mipmap.beoka);
msg.setThumbImage(thumb);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = msg;
req.scene = flag;
api.sendReq(req);
finish();
}
private void Dialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
final String[] models = new String[]{"微信好友", "微信朋友圈"};
builder.setTitle("分享给朋友"); //设置标题
builder.setSingleChoiceItems(models, modelIndex, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();//消除对话框
modelIndex = which;
if(modelIndex==1){
share2weixin(1);
}else if(modelIndex==0) {
share2weixin(0);//分享到朋友圈
}
}
}).show();
}
}
这里我只列举了一个分享网页的方法。其他差不多
接下来是回调
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
private IWXAPI api;
private String body;
private String bod;
private String nickname;
private String headimgurl;
private String unionid;
private static final int RETURN_MSG_TYPE_LOGIN = 1;
private static final int RETURN_MSG_TYPE_SHARE = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);
api= WXAPIFactory.createWXAPI(WXEntryActivity.this,"wx9433d9bf10c7a032");
api.registerApp("wx9433d9bf10c7a032");
//等待微信回调
api.handleIntent(getIntent(), this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq baseReq) {
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp baseResp) {
Bundle bundle=getIntent().getExtras();
SendAuth.Resp resp=new SendAuth.Resp(bundle);//这个是登陆必须用到的,要用来获取code值的。
//而区分分享回调返回的结果和登陆回调返回的结果 是用baseResp.getType()== ConstantsAPI.COMMAND_SENDAUTH
//和baseResp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX
//注意哈 这里的baseResp和resp是不同的哈。resp这个是登陆用到的
//获取到code之后,需要调用接口获取到access_token
if(baseResp.errCode==BaseResp.ErrCode.ERR_OK){
if(baseResp.getType()== ConstantsAPI.COMMAND_SENDAUTH){
String code=resp.token;
getAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx9433d9bf10c7a032&secret=183112ea358e6c84c5a37f11c03c2478&code="+code+"&grant_type=authorization_code");
}else if(baseResp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){
Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_SHORT).show();
finish();
}
}else {
WXEntryActivity.this.finish();
}
}
private void getAsync(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (null != response.cacheResponse()) {
String str = response.cacheResponse().toString();
Log.e("wangshu", "cache---" + str);
} else {
body=response.body().string();
String str = response.networkResponse().toString();
Log.e("wangshu", "network---" + str);
Log.e("body", "body---" + body);
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
JSONObject jsonObject=new JSONObject(body);
String access_token=jsonObject.getString("access_token");
int expires_in=jsonObject.getInt("expires_in");
String refresh_token=jsonObject.getString("refresh_token");
String openid=jsonObject.getString("openid");
String scope=jsonObject.getString("scope");
String unionid=jsonObject.getString("unionid");
getAsyncpersonData("https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openid);
Log.e("access_token\n",access_token);
Log.e("expires_in\n", String.valueOf(expires_in));
Log.e("refresh_token\n",refresh_token);
Log.e("openid\n",openid);
Log.e("scope\n",scope);
Log.e("unionid\n",unionid);
} catch (JSONException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
}
});
}
}
});
}
private void getAsyncpersonData(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = null;
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (null != response.cacheResponse()) {
String str = response.cacheResponse().toString();
Log.e("wangshu", "cache---" + str);
} else {
bod=response.body().string();
String str = response.networkResponse().toString();
Log.e("wangshu", "network---" + str);
Log.e("bod", "bod---" + bod);
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
JSONObject jsonObject=new JSONObject(bod);
nickname=jsonObject.getString("nickname");//微信用户昵称
headimgurl=jsonObject.getString("headimgurl");//微信用户头像
unionid=jsonObject.getString("unionid");//用户统一标识
SharedPreferences sharedPreferences=getSharedPreferences("weixinSave", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("nickname",nickname);
editor.putString("headimgurl",headimgurl);
editor.putString("unionid",unionid);
editor.commit();
// String nickname=jsonObject.getString("nickname");
//Glide.with(WXEntryActivity.this).load(headimgurl);
Log.e("access_token",nickname);
Log.e("refresh_token",headimgurl);
Log.e("openid",unionid);
} catch (JSONException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
SharedPreferences sharedPreferences_wx=getSharedPreferences("landingwx",Context.MODE_PRIVATE);
String land=sharedPreferences_wx.getString("landingwx","");
if("oneland".equals(land)){
Intent intent=new Intent(WXEntryActivity.this, MainActivity.class);
startActivity(intent);
finish();
}else if("meland".equals(land)){
Intent intentdis=new Intent();
intentdis.setAction("com.example.bluetooth.le.WX");
intentdis.putExtra("name",nickname);
intentdis.putExtra("headurl",headimgurl);
sendBroadcast(intentdis);
finish();
}
}
});
}
}
});
}
}
主要就是这里区分 登陆和分享的回调处理
//获取到code之后,需要调用接口获取到access_token
if(baseResp.errCode==BaseResp.ErrCode.ERR_OK){
if(baseResp.getType()== ConstantsAPI.COMMAND_SENDAUTH){
//登陆结果回调
String code=resp.token;
getAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx9433d9bf10c7a032&secret=183112ea358e6c84c5a37f11c03c2478&code="+code+"&grant_type=authorization_code");
}else if(baseResp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){
Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_SHORT).show();
finish();
}