您的位置:首页 > 移动开发 > 微信开发

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手机上运行测试, 分享即可成功,如有问题请留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: