Android微信SDK分享实现,及分享结果监测
2016-01-27 22:08
567 查看
微信的分享真难用啊啊啊啊啊啊啊啊啊
特别是分享结果的检测,真难搞啊啊啊啊啊啊啊啊
谁说微信的产品设计做得非常棒啊啊啊啊啊啊啊
审核通过后,拿到APP_ID
如果审核没有通过,还想分享,那么直接跳到文章最后,有介绍
这个的分享结果怎么检测,暂时不知道,也没有去试,有朋友知道的话,请留言
特别是分享结果的检测,真难搞啊啊啊啊啊啊啊啊
谁说微信的产品设计做得非常棒啊啊啊啊啊啊啊
1. 注册开发者
http://open.weixin.qq.com审核通过后,拿到APP_ID
如果审核没有通过,还想分享,那么直接跳到文章最后,有介绍
2. 声明接受分享结果的Activity
<!-- 请注意 这里的.wxapi 不是这个结构是得不到结果的 --> <activity android:name=".wxapi.WXEntryActivity" android:exported="true" android:label="@string/title_activity_wxentry" android:theme="@android:style/Theme.Translucent" > <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
3. 分享代码实现
//分享网址 private void shareToWXCommon(boolean isPYQ) { Toast.makeText(this, R.string.launching_wx, Toast.LENGTH_SHORT).show(); IWXAPI api; api = WXAPIFactory.createWXAPI(this, TuHaoConstants.WX_APP_ID); WXWebpageObject webpage = new WXWebpageObject(); Util.ConfigParser configParser = new Util.ConfigParser(this); webpage.webpageUrl = configParser.getShareUrl(); WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = configParser.getShareTitle(); msg.description = configParser.getShareDescription(); msg.thumbData = bmpToByteArray(BitmapFactory.decodeResource(this.getResources(), R .mipmap.ic_launcher)); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = String.valueOf(System.currentTimeMillis()) + getActionString(action); //这里有一个技巧,如果你是有多种分享结果要检测,可以在这个transaction里用字符标明出来,在处理结果的时候,可以拿出来对比 req.message = msg; req.scene = isPYQ ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req .WXSceneSession; api.sendReq(req); } //分享图片 private void shareToWXCommon(Bitmap bmp, Bitmap thumbBmp, boolean isPengYouQuan) { Toast.makeText(this.ctx, "正在生成", Toast.LENGTH_SHORT).show(); WXImageObject imgObj = new WXImageObject(bmp); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; if (thumbBmp == null) thumbBmp = compressImage(bmp, MAX_IMG_SIZE_WX_THUMB); else { thumbBmp = compressImage(thumbBmp, MAX_IMG_SIZE_WX_THUMB); } msg.thumbData = Util.bmpToByteArray(thumbBmp, true); //注意,万年坑,这里不能超载32K,不然分享失败 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img");//其实就是一个字符串,写啥都行。也可以写你要对结果进行分辨的文字,在获取到结果的时候,对比。 req.message = msg; req.scene = isPengYouQuan ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession; Toast.makeText(this.ctx, R.string.launching_wx, Toast.LENGTH_SHORT).show(); api.sendReq(req); }
4. 分享结果监测
重头戏啊package com.你的包.wxapi; /** * 这个activity是用微信分享用的,它们的分享结果由WXEntryActivity这样的命名的活动去接收 */ import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import com.tencent.mm.sdk.modelbase.BaseReq; import com.tencent.mm.sdk.modelbase.BaseResp; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.IWXAPIEventHandler; import com.tencent.mm.sdk.openapi.WXAPIFactory; //此方法,照写 public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI mApi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxentry); mApi = WXAPIFactory.createWXAPI(this, TuHaoConstants.WX_APP_ID, false); mApi.handleIntent(getIntent(), this); mApi.registerApp(TuHaoConstants.WX_APP_ID); } //此方法,无所谓 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. return true; } //无所谓,自动生成的 @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); return super.onOptionsItemSelected(item); } //必须重载,注意这里 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); mApi.handleIntent(intent, this); } //这个没有弄明白是在做什么 @Override public void onReq(BaseReq baseReq) { } //分享结果来了:我在这里使用了一个小技巧,就是把要处理的分辨的结果放在了transaction里,这样就知道每个分享的结果,是来源于哪里了。 @Override public void onResp(BaseResp baseResp) { int result = 0; boolean invitedDone = false; int action = 0; switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: if (baseResp.transaction.contains(InviteActivity.ACTION_DISABLE_ADS_STR)) { Util.disableAds(this); result = R.string.disable_ads_for_24hrs; invitedDone = true; action = InviteActivity.ACTION_DISABLE_ADS; } break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = R.string.cancel_to_share; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = R.string.deny_to_share; break; default: result = R.string.cancel_to_share; break; } Toast.makeText(this, result, Toast.LENGTH_SHORT).show(); if (invitedDone) { Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } this.finish(); } }
5. 番外 无APP_ID分享
如果你没有注册开发者,或者APP审查不通过,可以用下面的方法//这下面这些都是分享图片的 public void shareToWX(String path) { Bitmap bmp = BitmapFactory.decodeFile(path); Intent intent = new Intent(); ComponentName componentName = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI"); intent.setComponent(componentName); intent.setAction(Intent.ACTION_SEND); intent.setType("image/gif"); // intent.putExtra(Intent.EXTRA_TEXT, "分享到微信"); //有这句就变成了传文件 intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(path))); Toast.makeText(this.ctx, "正在启动微信", Toast.LENGTH_SHORT).show(); this.ctx.startActivity(intent); } public void shareToPengYouQuan(String path) { Intent intent = new Intent(); ComponentName componentName = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"); intent.setComponent(componentName); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(path))); //多图片分享朋友圈 // intent.setAction(android.content.Intent.ACTION_SEND_MULTIPLE); // ArrayList<Uri> uris = new ArrayList<Uri>(); // for (int i = 0; i < images.size(); i++) { // Uri data = Uri.fromFile(new File(thumbPaths.get(i))); // uris.add(data); // } // intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); intent.setType("image/*"); Toast.makeText(this.ctx, "正在启动微信", Toast.LENGTH_SHORT).show(); ctx.startActivity(intent); }
这个的分享结果怎么检测,暂时不知道,也没有去试,有朋友知道的话,请留言
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 【CF 应用开发大赛】IT Share(IT分享网)
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 突击部队拼多多
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- Android ADT 23.0.0无法更新到23.0.2问题解决方案
- 微信的成功,靠的是QQ导流吗?
- 「Linux 中国」2018 微信文章排行榜
- SDKMAN:轻松管理多个软件开发套件 (SDK) 的命令行工具
- 微信服务号推送模板消息接口
- 新版本susymenu树形菜单,请大家指教、分享
- Parse正式发布开源PHP SDK
- PHP限制页面只能在微信自带浏览器访问的代码
- javascript实现类似百度分享功能的方法
- HTML5实现微信拍摄上传照片功能