1. 程式人生 > >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();
            }