android 微信分享详解(分享到朋友和朋友圈)

最近研究了一下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手机上运行测试, 分享即可成功,如有问题请留言



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值