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

Android微信SDK分享实现,及分享结果监测

2016-01-27 22:08 567 查看
微信的分享真难用啊啊啊啊啊啊啊啊啊

特别是分享结果的检测,真难搞啊啊啊啊啊啊啊啊

谁说微信的产品设计做得非常棒啊啊啊啊啊啊啊

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);
}


这个的分享结果怎么检测,暂时不知道,也没有去试,有朋友知道的话,请留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信 sdk 分享