zoukankan      html  css  js  c++  java
  • Android 微信分享,分享到朋友圈与分享到好友,以及微信登陆

    extends:http://www.cnblogs.com/android100/p/Android-qq.html

    一、申请你的AppID

    http://open.weixin.qq.com/

      友情提示:推荐使用eclipse打包软件最后一步的MD5值去申请AppID

    二、官网下载libammsdk.jar包

    http://open.weixin.qq.com/download/?lang=zh_CN

    三、将libammsdk.jar复制到工程的libs目录

    四、在需要分享的Activity编写代码 

    private IWXAPI wxApi;  
    //实例化  
    wxApi = WXAPIFactory.createWXAPI(this, Constants.WX_APP_ID);  
    wxApi.registerApp(Constants.WX_APP_ID);  
    /** 
     * 微信分享 (这里仅提供一个分享网页的示例,其它请参看官网示例代码) 
     * @param flag(0:分享到微信好友,1:分享到微信朋友圈) 
     */  
    private void wechatShare(int flag){  
        WXWebpageObject webpage = new WXWebpageObject();  
        webpage.webpageUrl = "这里填写链接url";  
        WXMediaMessage msg = new WXMediaMessage(webpage);  
        msg.title = "这里填写标题";  
        msg.description = "这里填写内容";  
        //这里替换一张自己工程里的图片资源  
        Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.share_logo);  
        msg.setThumbImage(thumb);  
          
        SendMessageToWX.Req req = new SendMessageToWX.Req();  
        req.transaction = String.valueOf(System.currentTimeMillis());  
        req.message = msg;  
        req.scene = flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;  
        wxApi.sendReq(req);  
    }  
    //在需要分享的地方添加代码:  
    wechatShare(0);//分享到微信好友  
    wechatShare(1);//分享到微信朋友圈  
     

    五、在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity,实现IWXAPIEventHandler接口

     
    /** 微信客户端回调activity示例 */  
    public class WXEntryActivity extends Activity implements IWXAPIEventHandler {  
        // IWXAPI 是第三方app和微信通信的openapi接口  
        private IWXAPI api;  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            api = WXAPIFactory.createWXAPI(this, "这里替换第一步申请的APP_ID", false);  
            api.handleIntent(getIntent(), this);  
            super.onCreate(savedInstanceState);  
        }  
        @Override  
        public void onReq(BaseReq arg0) { }  
      
        @Override  
        public void onResp(BaseResp resp) {  
            LogManager.show(TAG, "resp.errCode:" + resp.errCode + ",resp.errStr:"  
                    + resp.errStr, 1);  
            switch (resp.errCode) {  
            case BaseResp.ErrCode.ERR_OK:  
                //分享成功  
                break;  
            case BaseResp.ErrCode.ERR_USER_CANCEL:  
                //分享取消  
                break;  
            case BaseResp.ErrCode.ERR_AUTH_DENIED:  
                //分享拒绝  
                break;  
            }  
        }  
    }  

    六、配置清单文件AndroidManifest.xml 

    <activity    
        android:name=".wxapi.WXEntryActivity"  
        android:exported="true"  
        android:screenOrientation="portrait"   
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />  

    七、签名打包软件,然后可以测试了

    /**
         * 微信分享
         *
         * @param flag(0:分享到微信好友,1:分享到微信朋友圈)
         */
        private void weChatShare(final int flag) {
    
    
            if (wxAPI != null && !wxAPI.isWXAppInstalled()) {
                AppUtils.showToast(mActivity, "您还未安装微信客户端呢");
                return;
            }
            ImageLoader.getInstance().loadImage(shareImageLink.replace("@100Q.jpg", "@100w_100h_1e_100Q.jpg|100x100-2rc.jpg"), new SimpleImageLoadingListener() {
                @Override
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                    super.onLoadingComplete(imageUri, view, loadedImage);
    
                    WXWebpageObject webpage = new WXWebpageObject();
                    webpage.webpageUrl = shareUrlLink;
    
                    WXMediaMessage msg = new WXMediaMessage(webpage);
                    msg.title = shareTitle;
                    msg.description = shareContent;
                    //这里替换一张自己工程里的图片资源
                    Bitmap thumb = loadedImage;
                    msg.setThumbImage(thumb);
                    SendMessageToWX.Req req = new SendMessageToWX.Req();
                    req.transaction = String.valueOf(System.currentTimeMillis());
                    req.message = msg;
                    req.scene = flag == 0 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
                    wxAPI.sendReq(req);
    
                    Log.e("Share", shareContent + shareTitle + shareUrlLink);
                }
            });
        }

    -------------------------------------------------------------------------------登陆-----------------------------------------------------------------------------------------

     //Login start:
           IWXAPI WXAPI = WXAPIFactory.createWXAPI(this, AppConstants.KEY_WEIXIN_APP_ID, true); WXAPI.registerApp(AppConstants.KEY_WEIXIN_APP_ID); SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_demo"; WXAPI.sendReq(req);

    WXEntryActivity

     // IWXAPI 是第三方app和微信通信的openapi接口
        private IWXAPI api;
    
        private Dialog progressDialog;// loading
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 通过WXAPIFactory工厂,获取IWXAPI的实例
            api = WXAPIFactory.createWXAPI(this, AppConstants.KEY_WEIXIN_APP_ID, true);
            api.registerApp(AppConstants.KEY_WEIXIN_APP_ID);
            api.handleIntent(getIntent(), this);
    
        }
    
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
    
            setIntent(intent);
            api.handleIntent(intent, this);
        }
    
        // 微信发送请求到第三方应用时,会回调到该方法
        @Override
        public void onReq(BaseReq req) {
            switch (req.getType()) {
                case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
    //                goToGetMsg();
                    break;
                case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
    //                goToShowMsg((ShowMessageFromWX.Req) req);
                    break;
                default:
                    break;
            }
        }
    public void onResp(BaseResp resp) {
    
            switch (resp.getType()) {
                case ConstantsAPI.COMMAND_SENDAUTH:
                    String result = null;
                    SendAuth.Resp sendResp = (SendAuth.Resp) resp;
                    if (sendResp.code != null&& !sendResp.code.equals("")) {
                        WeiXinToken weiXinToken = new WeiXinToken(this);
                        HashMap<String, String> params = new HashMap<String, String>();
                        params.put("appid", Constants.APP_ID);
                        params.put("secret", Constants.App_Key);
                        params.put("code", sendResp.code);
                        params.put("grant_type", "authorization_code");
                        weiXinToken.getToken(params);
              
                    }
    
                    switch (resp.errCode) {
                        case BaseResp.ErrCode.ERR_OK:
                            result = "登录成功";
                            break;
                        case BaseResp.ErrCode.ERR_USER_CANCEL:
                            result = "用户取消";
                            break;
                        case BaseResp.ErrCode.ERR_AUTH_DENIED:
                            result = "登录失败";
                            break;
                        default:
                            result = "未知错误";
                            break;
                    }
    
                    Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
                    finish();
                    break;
    
                case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:
                    String result2 = null;
    
                    switch (resp.errCode) {
                        case BaseResp.ErrCode.ERR_OK:
                            result2 = "分享成功";
                            break;
                        case BaseResp.ErrCode.ERR_USER_CANCEL:
                            result2 = "用户取消";
                            break;
                        case BaseResp.ErrCode.ERR_AUTH_DENIED:
                            result2 = "分享失败";
                            break;
                        default:
                            result2 = "未知错误";
                            break;
                    }
    
                    Toast.makeText(this, result2, Toast.LENGTH_SHORT).show();
                    finish();
                    break;
    
                default:
                    break;
            }
        }
    
    
    
    
    
        private void getAccessTokenFromWeiXin(String code) {
            //https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    
            String requestUrlAppId = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + AppConstants.KEY_WEIXIN_APP_ID;
            String requestUrlAppSecret = "&secret=" + AppConstants.KEY_WEIXIN_APP_SECRET;
            String requestUrlCode = "&code=" + code;
            String requestUrlLast = "&grant_type=authorization_code";
    
            String requestUrl = requestUrlAppId + requestUrlAppSecret + requestUrlCode + requestUrlLast;
    
            HttpUtil.get(requestUrl, null, new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, String content) {
                    JSONObject jsonObject = null;
                    try {
                        jsonObject = new JSONObject(content);
                        if (jsonObject.has("access_token") && jsonObject.has("openid")) {
                            String access_token = jsonObject.getString("access_token");
                            String openid = jsonObject.getString("openid");
                            getUserInfoFromWeiXin(access_token, openid);
                        } else {
                            AppUtils.showToast(WXEntryActivity.this, "授权失败");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    
                @Override
                public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable error) {
                    AppUtils.showToast(WXEntryActivity.this, "请求失败,请检查网络重试");
                }
    
            });
        }
    
        //https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN
    
        //            "openid":"OPENID",
    //            "nickname":"NICKNAME",
    //            "sex":1,
    //            "province":"PROVINCE",
    //            "city":"CITY",
    //            "country":"COUNTRY",
    //            "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    //            "privilege":[
    //            "PRIVILEGE1",
    //            "PRIVILEGE2"
    //            ],
    //            "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
        private void getUserInfoFromWeiXin(String token, String openid) {
            //https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
            String requestUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid=" + openid;
            HttpUtil.get(requestUrl, null, new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, String content) {
                    JSONObject jsonObject = null;
                    try {
                        jsonObject = new JSONObject(content);
                        if (jsonObject.has("nickname")) {
                            String openid = jsonObject.getString("openid");
                            String nickname = jsonObject.getString("nickname");
                            String sex = jsonObject.getString("sex");
                            String province = jsonObject.getString("province");
                            String city = jsonObject.getString("city");
                            String country = jsonObject.getString("country");
                            String headimgurl = jsonObject.getString("headimgurl");
                            String privilege = jsonObject.getString("privilege");
                            String unionid = jsonObject.getString("unionid");
                            postUserInfo2CBServer(unionid, sex, headimgurl, nickname, country, province, city);
                        } else {
                            AppUtils.showToast(WXEntryActivity.this, "授权失败");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    
    
                @Override
                public void onFailure(int statusCode, Header[] headers, String errorResponse, Throwable e) {
                    AppUtils.showToast(WXEntryActivity.this, "请求失败,请检查网络重试");
                }
            });
        }
  • 相关阅读:
    脏读、不可重复读、幻读
    数据库一致性
    java 不同时间格式转化
    python-walk遍历目录及查找目录小例子
    python_os模块
    python_time模块
    exec和eval内置函数
    python-filter函数
    python-map函数
    python_内置函数
  • 原文地址:https://www.cnblogs.com/niray/p/4276878.html
Copyright © 2011-2022 走看看