0、开发者自己做好准备工作:(包括开发者自己创建app和填写app的信息)
1、添加依赖或者jar:
dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' }
或
dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' }
(其中,前者包含统计功能)
2、权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3、清单文件manifest配置:
<!-- 微信开放平台配置 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="net.sourceforge.simcpux"
android:launchMode="singleTask">
</activity>
4、创建该路径下的类(包名.wxapi.WXEntryActivity(不可更改))
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
//WechatShareTool类见下一步
new WechatShareTool(this).getApi().handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq arg0) {
// TODO 自动生成的方法存根
finish();
}
@Override
public void onResp(BaseResp resp) {
// TODO 自动生成的方法存根
switch (resp.errCode) { //根据需要的情况进行处理
case BaseResp.ErrCode.ERR_OK:
//正确返回
//ActivityTool.showToast为Toast的简单封装,开发中自行修改
ActivityTool.showToast(this, "分享成功");//后来微信改为无论分没分享都返回这一个
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//用户取消
// ActivityTool.showToast(this, "取消分享");//取消也会返回ERR_OK
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
//认证被否决
ActivityTool.showToast(this, "分享失败,认证被否决");
break;
case BaseResp.ErrCode.ERR_SENT_FAILED:
//发送失败
ActivityTool.showToast(this, "发送失败");
break;
case BaseResp.ErrCode.ERR_UNSUPPORT:
//不支持错误
ActivityTool.showToast(this, "不支持错误");
break;
case BaseResp.ErrCode.ERR_COMM:
//一般错误
ActivityTool.showToast(this, "分享失败");
break;
default:
//其他不可名状的情况
break;
}
finish();
}
}
5、分享核心代码部分:
public class WechatShareTool {
private final static String WX_APP_ID = "your key";//WX_APP_ID自行修改为你的appkey
private IWXAPI api;
private int toFriend = SendMessageToWX.Req.WXSceneSession;//会话
private int toFriendCircle = SendMessageToWX.Req.WXSceneTimeline;//朋友圈
//SendMessageToWX.Req.WXSceneFavorite //分享到收藏
public WechatShareTool(Context context){
api = WXAPIFactory.createWXAPI(context, WX_APP_ID,false);
// 将应用的appId注册到微信
api.registerApp(WX_APP_ID);
}
public IWXAPI getApi(){
return api;
}
/*
* 是否安装了微信
*/
public boolean isWXAppInstalled(){
return api.isWXAppInstalled();
}
/**
* 微信文字分享
* @param text
* @param isNotToFriend 是否分享到朋友圈
*/
public void shareText(String text,boolean isNotToFriend){
//初始化一个 WXTextObject 对象,填写分享的文本内容
WXTextObject textObj = new WXTextObject();
textObj.text = text;
//用 WXTextObject 对象初始化一个 WXMediaMessage 对象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;
msg.description = text;
shareToWX("text", msg, isNotToFriend);
}
/*
* 保证字符串唯一
*/
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
/**
* 分享图片
* @param file
*/
public void shareImage(String picturePath,boolean isNotToFriend){
Bitmap bmp = BitmapFactory.decodeFile(picturePath);
//初始化 WXImageObject 和 WXMediaMessage 对象
WXImageObject imgObj = new WXImageObject(bmp);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
//设置缩略图
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
bmp.recycle();
msg.thumbData = OtherTool.bmpToByteArray(thumbBmp, true);
shareToWX("img", msg, isNotToFriend);
}
/**
* 分享音乐
* @param title
* @param description
* @param musicUrl
* @param file
*/
public void shareMusic(String title,String description,String musicUrl,String picturePath,boolean isNotToFriend){
//初始化一个WXMusicObject,填写url
WXMusicObject music = new WXMusicObject();
music.musicUrl=musicUrl;
Bitmap bmp = BitmapFactory.decodeFile(picturePath);
WXMediaMessage msg = getWXMediaMessage(title, description, music, bmp);
shareToWX("music",msg,isNotToFriend);
}
/**
* 分享视频
* @param title
* @param description
* @param viedoUrl
* @param file
*/
public void shareVideo(String title,String description,String viedoUrl ,String picturePath,boolean isNotToFriend){
//初始化一个WXVideoObject,填写url
WXVideoObject video = new WXVideoObject();
video.videoUrl = viedoUrl;
Bitmap bmp = BitmapFactory.decodeFile(picturePath);
WXMediaMessage msg = getWXMediaMessage(title, description, video, bmp);
shareToWX("video",msg,isNotToFriend);
}
/*
* 设置mediaMessage和图片缩略图
*/
private WXMediaMessage getWXMediaMessage(String title,String description,IMediaObject media,Bitmap bmp){
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = media;
msg.title = title;
msg.description = description;
//设置缩略图
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 100, 100, true);
bmp.recycle();
msg.thumbData = bmpToByteArray(thumbBmp, true);//方法在最后面
return msg;
}
/*
* 分享
*/
private void shareToWX(String type,WXMediaMessage msg,boolean isNotToFriend){
//构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction(type);
req.message =msg;
if(isNotToFriend)
req.scene = toFriendCircle;
else
req.scene = toFriend;
req.userOpenId = WX_APP_ID;
//调用api接口,发送数据到微信
api.sendReq(req);
}
/*
* 图片转换
*/
private byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
6、使用
实例化 WechatShareTool类后直接调用它的对应public的方法即可