天天看點

Android內建微信SDK:微信分享0、開發者自己做好準備工作:(包括開發者自己建立app和填寫app的資訊)1、添加依賴或者jar:或2、權限:3、清單檔案manifest配置: 4、建立該路徑下的類(包名.wxapi.WXEntryActivity(不可更改))5、分享核心代碼部分:6、使用 

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

}           

6、使用 

執行個體化 WechatShareTool類後直接調用它的對應public的方法即可