android 微信分享详解(分享到朋友和朋友圈)
2014-06-13 17:30
344 查看
最近研究了一下android 微信分享到朋友和朋友圈,颇有心得,在这里总结一下失败的惨痛教训,为码农们少走弯路做些许贡献
分享微博无非是两种分享方式,一种调用系统自带的分享,一种是去微信开发平台获取方法。
首先第一种调用系统自带的微信分享图片(此方法只能分享图片或文字,一般和项目需求都有出入,不建议用):
第一步得到拿到项目中的一张图片转换成Uri
Bitmap bt= BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.erweima);
final Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bt, null,null));
分享到朋友:
private void shareToFriend(Uri uri) {
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(comp);
intent.setAction("android.intent.action.SEND");
intent.setType("image/*");
//intent.setFlags(0x3000001);
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent);
}
分享到朋友圈:
private void shareToFriendsLine(Uri uri) {
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareToTimeLineUI");
intent.setComponent(comp);
intent.setAction("android.intent.action.SEND");
intent.setType("image/*");
//intent.setFlags(0x3000001);
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent);
}
第二种分享方法是用微信的api做分享(该方式可以分享图片,文字和链接,但过程比较麻烦而且容易出错):
ps:如果你发送分享时返回false,这90%概率不是你代码的问题,不是代码的问题,而你的图片太大了
此种方法要去微信开放平台申请appid,然后还要等申请成功,成功后还要把一个指定功能的Activity放到指定的包中,即使以上的都做对了,你也会可能因为
没有打包测试而分享失败,即使打包了也不能保证你打包的文件签名和平台请那里写的签名一致,还有包名也要在平台注册,即使以上都成功了,也有可能
因为分享的图片太大而失败。
以上的种种都说明了从对微信的一无所知到对他的开发流程完全掌握及分享实现是一件多么艰辛的事情啊,md的微信,同样是腾讯的东西,看人家qq分享多简单
在文章的最后我会贴出源码和签名文件的下载地址,及已经申请成功的appid号,供大家方便测试(当然最好还是自己申请个appid,至于好处,看一下分享成功后的朋友圈就明白了)
实例代码只有两个Activity,包名不要弄错了,截图如下
MainActivity:
public class MainActivity extends Activity {
private static final String appid = "wx86b3d972e5ddd153";
private IWXAPI wxApi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wxApi = WXAPIFactory.createWXAPI(this, appid);
wxApi.registerApp(appid);
}
public void friend(View v){
share(0);
}
public void friendline(View v){
share(1);
}
private void share(int flag){
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = "http://blog.csdn.net/yeyuehei/article/details/28854667";
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "test_myblog";
msg.description = "test_myblog";
//这里替换一张自己工程里的图片资源
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.erweimas);
msg.setThumbImage(thumb);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction =buildTransaction("webpage");
req.message = msg;
req.scene = flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;
boolean fla = wxApi.sendReq(req);
System.out.println("fla="+fla);
}
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
WXEntryActivity:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, "wx86b3d972e5ddd153", false);
api.handleIntent(getIntent(), this);
}
@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:
Toast.makeText(getApplicationContext(), "分享成功", 2000).show();
System.out.println("success");
this.finish();
//分享成功
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//分享取消
Toast.makeText(getApplicationContext(), "分享取消", 2000).show();
System.out.println("ERR_USER_CANCEL");
this.finish();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Toast.makeText(getApplicationContext(), "分享成功", 2000).show();
System.out.println("ERR_AUTH_DENIED");
this.finish();
//分享拒绝
break;
}
}
}
注册该Activity :
<activity
android:name="com.example.leikemei.wxapi.WXEntryActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
源码下载地址:http://download.csdn.net/detail/yeyuehei/7494691
appid : wx86b3d972e5ddd153
打包签名文工具下载地址:http://download.csdn.net/detail/yeyuehei/7494705
打包签名密码:123456789
源码导入eclipse,用该打包签名工具打包后在android手机上运行测试, 分享即可成功,如有问题请留言
分享微博无非是两种分享方式,一种调用系统自带的分享,一种是去微信开发平台获取方法。
首先第一种调用系统自带的微信分享图片(此方法只能分享图片或文字,一般和项目需求都有出入,不建议用):
第一步得到拿到项目中的一张图片转换成Uri
Bitmap bt= BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.erweima);
final Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bt, null,null));
分享到朋友:
private void shareToFriend(Uri uri) {
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(comp);
intent.setAction("android.intent.action.SEND");
intent.setType("image/*");
//intent.setFlags(0x3000001);
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent);
}
分享到朋友圈:
private void shareToFriendsLine(Uri uri) {
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareToTimeLineUI");
intent.setComponent(comp);
intent.setAction("android.intent.action.SEND");
intent.setType("image/*");
//intent.setFlags(0x3000001);
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent);
}
第二种分享方法是用微信的api做分享(该方式可以分享图片,文字和链接,但过程比较麻烦而且容易出错):
ps:如果你发送分享时返回false,这90%概率不是你代码的问题,不是代码的问题,而你的图片太大了
此种方法要去微信开放平台申请appid,然后还要等申请成功,成功后还要把一个指定功能的Activity放到指定的包中,即使以上的都做对了,你也会可能因为
没有打包测试而分享失败,即使打包了也不能保证你打包的文件签名和平台请那里写的签名一致,还有包名也要在平台注册,即使以上都成功了,也有可能
因为分享的图片太大而失败。
以上的种种都说明了从对微信的一无所知到对他的开发流程完全掌握及分享实现是一件多么艰辛的事情啊,md的微信,同样是腾讯的东西,看人家qq分享多简单
在文章的最后我会贴出源码和签名文件的下载地址,及已经申请成功的appid号,供大家方便测试(当然最好还是自己申请个appid,至于好处,看一下分享成功后的朋友圈就明白了)
实例代码只有两个Activity,包名不要弄错了,截图如下
MainActivity:
public class MainActivity extends Activity {
private static final String appid = "wx86b3d972e5ddd153";
private IWXAPI wxApi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wxApi = WXAPIFactory.createWXAPI(this, appid);
wxApi.registerApp(appid);
}
public void friend(View v){
share(0);
}
public void friendline(View v){
share(1);
}
private void share(int flag){
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = "http://blog.csdn.net/yeyuehei/article/details/28854667";
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "test_myblog";
msg.description = "test_myblog";
//这里替换一张自己工程里的图片资源
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.erweimas);
msg.setThumbImage(thumb);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction =buildTransaction("webpage");
req.message = msg;
req.scene = flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;
boolean fla = wxApi.sendReq(req);
System.out.println("fla="+fla);
}
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
WXEntryActivity:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, "wx86b3d972e5ddd153", false);
api.handleIntent(getIntent(), this);
}
@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:
Toast.makeText(getApplicationContext(), "分享成功", 2000).show();
System.out.println("success");
this.finish();
//分享成功
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//分享取消
Toast.makeText(getApplicationContext(), "分享取消", 2000).show();
System.out.println("ERR_USER_CANCEL");
this.finish();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Toast.makeText(getApplicationContext(), "分享成功", 2000).show();
System.out.println("ERR_AUTH_DENIED");
this.finish();
//分享拒绝
break;
}
}
}
注册该Activity :
<activity
android:name="com.example.leikemei.wxapi.WXEntryActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
源码下载地址:http://download.csdn.net/detail/yeyuehei/7494691
appid : wx86b3d972e5ddd153
打包签名文工具下载地址:http://download.csdn.net/detail/yeyuehei/7494705
打包签名密码:123456789
源码导入eclipse,用该打包签名工具打包后在android手机上运行测试, 分享即可成功,如有问题请留言
相关文章推荐
- 【android】 微信分享详解(分享到朋友和朋友圈)+ PopupWindow的使用和分析
- Android微信朋友、朋友圈分享(二)
- 微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
- android 微信朋友分享,朋友圈分享
- 微信js-sdk+JAVA实现“分享到朋友圈”和“发送给朋友”功能详解
- Android微信朋友、朋友圈分享(一)
- [Android分享] 不使用官方SDK,实现微信分享(发送到朋友,发送到朋友圈)
- Android 分享微信好友 朋友圈
- 微信分享到朋友圈,分享给朋友JS代码
- Android实现微信的分享与发送到朋友圈功能
- 微信6.0.2版本js获取分享到朋友圈和发送给朋友事件
- 不使用官方SDK,实现微信分享(发送到朋友,发送到朋友圈)
- Android:QQ分享、微信分享、朋友圈分享(不使用第三方SDK)
- Android实现分享内容到微信朋友圈
- Android实现微信开放平台、易信平台分享(好友及朋友圈)
- 微信分享内容给朋友、朋友圈、QQ、QQ空间等
- 微信分享到朋友圈,分享给朋友JS代码
- 不使用官方SDK,实现微信分享(发送到朋友,发送到朋友圈)
- 微信分享给朋友及朋友圈JS代码
- 请问android使用友盟分享,分享到微信好友和朋友圈详细步骤是什么,我现在分享之后没结果。