Android微信登陆和微信分享,和登陆分享的回调处理

本文详细介绍了如何在Android应用中实现微信登录及分享功能。包括微信登录的代码实现过程、分享网页的具体步骤,并展示了如何处理登录与分享的回调结果。

首先是微信登陆。

直接上代码

在点击登陆时候  

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();
            }



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值