不得不说,为了实现一个微信简单的分享功能真的是浪费了我好多的时间,官方的文档说的什么我也不做什么评价,毕竟这个sdk是人家写的,我学习这个sdk的重要方法就是在看那个给的那个官方的demo,就和学习百度云推送一样,我感觉我们要是可以理清了这个demo的基本思路,那么我们就可以简单了利用它来实现自己的东西了。我觉得最好的学习方法就是在原有的基础上面改,毕竟人家那个例子是可以运行的,我们改一点看一点,只要是不改的太多基本就可以完美运行,这样的话看到了自己改动的痕迹,我们学起来也有信心与兴趣!好了废话不多说,我这里只是想说一下关于网页分享的问题,如果学习过微信官方给的demo的话,那么大家就一定会发现那个网页的分享是不可用的,究其根本原因貌似是图片转化上面有点问题,感兴趣的朋友可以去百度或者谷歌一下,就一定会有大神来给我们讲解的!好了,下面我们就来看一下我的这个例子的实现。
毕竟大家都是有Android开发经验的人了,对于布局文件什么的,大家可以随心所欲的实现,还有就是要在libs里面加入微信的sdk包,这个例子我做的也是特别好,就不在此班门弄斧了,直接上主代码:
package com.weixinshare.wxapi; import com.tencent.mm.sdk.openapi.BaseReq; import com.tencent.mm.sdk.openapi.BaseResp; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.IWXAPIEventHandler; import com.tencent.mm.sdk.openapi.SendMessageToWX; import com.tencent.mm.sdk.openapi.WXAPIFactory; import com.tencent.mm.sdk.openapi.WXMediaMessage; import com.tencent.mm.sdk.openapi.WXWebpageObject; import com.weixintest.R; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ public static final String APP_ID = "wx6a4a9fd0f8322251"; // IWXAPI 是第三方app和微信通信的openapi接口 private IWXAPI api; private Button gotoBtn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entry); // 通过WXAPIFactory工厂,获取IWXAPI的实例 api = WXAPIFactory.createWXAPI(this, APP_ID, false); gotoBtn = (Button) findViewById(R.id.button1); gotoBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { api.registerApp(APP_ID); WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = "http://www.baidu.com"; WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = "我的测试"; msg.description = "测试微信分享"; try { Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_img); Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true); bmp.recycle(); msg.setThumbImage(thumbBmp); } catch (Exception e) { e.printStackTrace(); } SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = String.valueOf(System.currentTimeMillis()); req.message = msg; req.scene = SendMessageToWX.Req.WXSceneTimeline; // req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession; api.sendReq(req); } }); } // 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq req) { } // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 @Override public void onResp(BaseResp resp) { String result; 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_LONG).show(); }我感觉这具体的语法啥的无非就是这几个对象的建立然后用req发出去,这里我要讲一下我的问题的所在,以至于我一度认为微信sdk有bug......
相信大家都知道,这个微信的验证是很麻烦的,必须要求我们的程序的签名,api_id和我们申请时候所填的包名必须一致才可以保证它的正常与运行。因为我在改自己的例子的时候吧,改包名那里就只是简单的用shift+alt+r更改了而已,然后我还特意的去我的workspace的文件夹发现这个例子的一层层的文件夹都变了就是先com->weixintest->wxapi,但是我在测试的是后无论怎样都测试不了,我还以为是签名的问题,于是在我的获取签名的手机软件里面输入:com.weixintest 竟然告诉我,这个没有签名,我就更加扑朔迷离了,大家可以想象一下我当时的心情,我的确是用Android->tool生成的签名apk啊,最后竟然告诉我没有签名,而且按照官方的说法我更改了包名就应该错误了吧,于是我又打开一个新的微信Demo的例子(可以正常运行的官方的例子),用shift+alt+r的方法把那个net.resourceforge.simcpux更改为了com.share最后竟然还可以正常与运行
神奇的是我在获取签名的软件中输入:net.resourceforge.simcpux竟然获取了默认的debug签名,我在想我这里也没有这个包啊?于是感觉特别神奇,这时,我就在想是什么让我没有该包呢,于是上网查了一下,发现改包的的方法还是我用的那个啊,这时候我无意的去看了一个关于解释微信的sdk的博客,我这才突然发现貌似也可以在manifest里面改包,于是我就去看了一下我的manifest,竟然发现我的包名竟然没有变化。。。。于是一切都明了了。。。然后我就在这里更改了包名为了com.wexintest于是就ok了!
或许对于一些大神来说没有遇到这用“二”的问题,由于我花费了很长时间才搞懂这个,就特地在此写出来分享一下,也做个纪念吧!