Android 微信分享,分享到朋友圈与分享到好友,以及微信登陆
extends:http://www.cnblogs.com/android100/p/Android-qq.html
一、申请你的AppID
友情提示:推荐使用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, "请求失败,请检查网络重试");
            }
        });
    }
Android 微信分享,分享到朋友圈与分享到好友,以及微信登陆的更多相关文章
- 域名在微信朋友圈内分享需要ICP备案 杜绝不良信息传播
		
就在刚刚,腾讯微信团队发布公告表示域名在朋友圈内分享需要ICP备案,杜绝打击不良互联网信息的传播.公告称根据互联网管理相关规定,即日起在微信朋友圈内分享的域名,请在2014年12月31日前完成ICP备 ...
 - c#微信开发,使用JS-SDK自定义分享功能,分享朋友圈,分享给朋友等
		
如果一个后端开发掌握了微信开发,甚至有微信开发上线项目,这在换工作的时候 还是有竞争力的. 微信开发的资料很多,但是用asp.net c#进行微信开发好像比较少,或者资料不够完整. 使用JS-SDK自 ...
 - Android微信逆向--实现发朋友圈动态
		
0x0 前言 最近一直在研究Windows逆向的东西,想着快要把Android给遗忘了.所以就想利用工作之余来研究Android相关的技术,来保持对Android热情.调用微信代码来发送朋友圈动态一直 ...
 - 微信小程序仿朋友圈功能开发(发布、点赞、评论等功能)
		
微信小程序仿朋友圈功能开发(发布.点赞.评论等功能) 1.项目分析 项目整体分为三个部分 发布 展示 详情页 graph LR 朋友圈发布 --内容发布--> 内容展示 内容展示 --点击展示卡 ...
 - MUI  分享功能(微信、QQ 、朋友圈)
		
配置文件:manifest.json plus ->plugins 下边 "share": {/*配置应用使用分享功能,参考http://ask.dcloud.net.cn/ ...
 - Android分享图文到朋友圈代码。
		
分享到微信朋友圈代码.不好用,最后选择了shareSdk. private static void shareToTimeLine(File file) { Intent intent = new I ...
 - 微信公众号开发--微信JS-SDK分享到朋友圈和分享给朋友
		
之前写过一篇使用微信JS-SDK来实现扫一扫功能的博客 微信公众号开发–微信JS-SDK扫一扫功能 在该博客里介绍了微信JS-SDK的基本用法,其中包括以下几个步骤 还详细介绍了通过config接口注 ...
 - 微信内测"微视频" 朋友圈可以发6-8秒短视频
		
我们在发朋友圈时现在只能发文字和图片,图片又分为从相册中选择和直接拍摄照片,以后朋友圈拍6-8秒短视频可能是一种新的内容形式,作为文字和图片外的补充.因为微信开始内测新功能“微视频”,其产品理念与微视 ...
 - 基于Qt下移动平台第三方接入-ShareSDK(新浪微博,微信朋友圈等分享登录)
		
一. ShareSDK简介 ShareSDK是为iOS.Android.WP8的APP提供社会化功能的一个组件,开发者只需10分钟即 可集成到自己的APP中,它不仅支持如QQ.微信.新浪微博.腾讯微博 ...
 
随机推荐
- Entity Framework管理实体关系(二):管理一对二关系
			
在上一篇文章中,简单的介绍了使用Fluent API如何管理一对一的实体关系,在这篇文章中,接着介绍Fluent API如何管理一对多的实体关系. 要在数据库中配置一对多关系,我们可以依赖EF约定,还 ...
 - windows server 2003中用系统自带工具调整磁盘分区大小
			
先在需要扩展的右边留出未分配的磁盘空间,可以通过 我的电脑 右键 管理 磁盘管理来操作 首先 进入cmd界面 然后输入Diskpart 这个时候进入DISKPART> 界面 然后你 先选择磁盘一 ...
 - mvn 仓库地址修改
			
默认仓库的存储位置 Maven缺省的本地仓库路径为${user.home}/.m2/repository具体如下图 自定义修改仓库的存储位置: 可改变默认的 .m2 目录下的默认本地存储库文件夹通过修 ...
 - 上手并过渡到PHP7(2)——必须传递int, string, bool参数?没问题
			
Type hints, Type safe 泊学实操视频 泊学原文链接PHP 7中最引人注目的新特性之一,无疑是Scalar type hints.我们可以在函数参数和返回值中使用scalar typ ...
 - ASP.NET MVC 使用 Datatables (2)
			
在服务器端实现分页,排序,获取当前页面数据 在上篇的基础上进行改造(datatables的客户端实现) 1.修改View页面代码如下: <div class="row"> ...
 - bson.errors.InvalidStringData: strings in documents must be valid UTF-8
			
场景: pymongo 查询数据库的时候报错. for gscode in GSList_StockPool_Mongo_MktStop: self._collection_flash.find({& ...
 - 1077. Kuchiguse (20)【字符串处理】——PAT (Advanced Level) Practise
			
题目信息 1077. Kuchiguse (20) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B The Japanese language is notorious f ...
 - Java Error: java.lang.UnsupportedClassVersionError: ...bad major version at offset=6
			
问题分析 报这个错误是指你的jar包或者class 的被编译的jdk版本比当前runtime的jdk版本高. 首先,确定你当前的运行版本: Java代码 Java -version java ve ...
 - [转]JVM性能调优监控工具
			
http://my.oschina.net/feichexia/blog/196575?p=1#comments JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jCo ...
 - Java动态代理-->Spring AOP
			
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Jav ...