0、開發者自己做好準備工作:(包括開發者自己建立app和填寫app的資訊)
官方接入教程文檔:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN
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;
}
}