現在項目中用個第三方登陸。或分享已經不是什麼稀奇事了。但是要想把這個功能作好,那可就不easy了。預計到這裏就有人會說了,扯犢子,這玩意,我用第三方sdk,什麼umeng,sharesdk分分鐘給你作出來,但是這些第三方sdk僅僅有對項目的分享要求不高的時候才適合,假設要定製分享,那我就僅僅能呵呵。儘管第三方登陸或分享沒什麼技術難度,但是各類配置,而且每一個都不太同樣,少配置一個地方代碼就通只是了,因此基於上問題。特寫此文以備不時之需。java
好。上面扯太多了。現在正式上代碼,咱們先從QQ入手,你問爲何,因爲他最簡單呀android
首先不得不吐槽一個問題,就是騰訊的文檔是最全的,全的你都找不到在哪裏,點擊這裏可以查看官方文檔這裏下載官方demo下載git
另外,因爲官方文檔太難找了,特上此圖github
首先下載sdk,我下載的版本號是Android_SDK_V2.9.4,解壓後文件夾如圖所看到的api
其它jar文件夾如下是需要加入你的項目依賴中去的jar包。sample就是顧名思義啦。可以直接將他導入eclipse,並更編碼爲utf-8,只是當前版本號的demo配置有點問題。導入完畢後會有例如如下錯誤安全
只是別急,咱們程序猿最擅長解決這樣的問了,再說有什麼問題能難倒我聰明的程序猿呢微信
首先咱們可以隨便打開一個文件,可以查看到時找不到這樣的包com.tencent.tauth.IRequestListener,這咱們第一反應確定是,沒有加入依賴包。臥槽,真聰明,恭喜你答對了,呵呵~markdown
既然這樣那問題就簡單了。直接拷貝jar文件夾如下jar包放到libs,並add path(假設需要),這下整個世界都清淨了,錯誤通通滾開了,現在就可以執行看看效果網絡
配置權限微信開發
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- SDK2.1新增獲取用戶位置信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<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.GET_TASKS"/>
配置activity
<activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- 這地方的123456需要用你在開放平臺申請的appid替換 -->
<data android:scheme="tencent123456" />
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="behind" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
到這裏咱們的清單文件和activity都配置完了,接下來我要實例化Tencent類,所有的操做都是經過他來的,查看demo這個類的實例化是在MainActivity#onCreate方法中,並弄成了單例
public static Tencent mTencent;
if (mTencent == null) {
mTencent = Tencent.createInstance(mAppid, this);
}
現在咱們需要在分享或登陸的過程當中拿到一些狀態,就需要用到IUiListener,調用SDK已經封裝好的接口時。好比:登陸、高速支付登陸、應用分享、應用邀請等接口,需傳入該回調的實例。
IUiListener qqShareListener = new IUiListener() {
@Override
public void onCancel() {
if (shareType != QQShare.SHARE_TO_QQ_TYPE_IMAGE) {
Util.toastMessage(QQShareActivity.this, "onCancel: ");
}
}
@Override
public void onComplete(Object response) {
// TODO Auto-generated method stub
Util.toastMessage(QQShareActivity.this, "onComplete: " + response.toString());
}
@Override
public void onError(UiError e) {
// TODO Auto-generated method stub
Util.toastMessage(QQShareActivity.this, "onError: " + e.errorMessage, "e");
}
};
//假設要收到QQ分享,或登陸的一些狀態,必須加入代碼
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode,resultCode,data,listener);
}
我這僅僅貼咱們今天用到的代碼。其它的你們可以直接在demo裏面複製。本文主要內容是。記錄一些配置。而並不是貼代碼
public void shareOnlyImageOnQQ(View view) {
final Bundle params = new Bundle();
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用");
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
// params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打開這句話,可以實現分享純圖到QQ空間
doShareToQQ(params);
}
private void doShareToQQ(final Bundle params) {
// QQ分享要在主線程作
ThreadManager.getMainHandler().post(new Runnable() {
@Override
public void run() {
if (null != mTencent) {
mTencent.shareToQQ(QQActivity.this, params, qqShareListener);
}
}
});
}
截止到2016-4-8。QZONE暫不支持純圖片分享,官網文檔這裏也有說。
但是咱們可以經過分享到QQ時設置一個參數。就可以直接分享純圖到QQ空間了
public void shareOnlyImageOnQZone(View view) {
final Bundle params = new Bundle();
//本地地址必定要傳sdcard路徑,不要什麼getCacheDir()或getFilesDir()
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用");
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打開這句話,可以實現分享純圖到QQ空間
doShareToQQ(params);
}
注意:這裏有個很是重要的就是,分享本地圖片時路徑必定不要傳getCacheDir()或getFilesDir()等。
不要問我爲何,因爲你既然是分享圖片到QQ。他要幫我顯示,但你給他一個私有文件夾。他確定不能顯示。那種重點來了。這就到致使很是多朋友在作分享時。分享的圖片不能顯示得緣由了。
別我是怎麼知道的。我說我猜的,你信麼~~
QQ實例完整代碼,因爲確定問了,既然上面貼了部分代碼,爲啥如下還要全貼處理。這你就不懂了吧,上面我僅僅貼了部分,但是他們沒多大的關聯性。可能不太好理解,而我但願的就是。你們一看看就明確了,不需要再下載demo再在手機上跑一遍,就能解決這個問題。效果纔是王道
package cn.woblog.testthirdpartyfunction.activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.tencent.connect.share.QQShare;
import com.tencent.open.utils.ThreadManager;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import cn.woblog.testthirdpartyfunction.R;
import cn.woblog.testthirdpartyfunction.Util;
public class QQActivity extends AppCompatActivity {
public static Tencent mTencent;
private static final String mAppid = "1105245621";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qq);
if (mTencent == null) {
mTencent = Tencent.createInstance(mAppid, this);
}
}
public void shareOnlyImageOnQZone(View view) {
final Bundle params = new Bundle();
//本地地址必定要傳sdcard路徑,不要什麼getCacheDir()或getFilesDir()
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用");
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打開這句話,可以實現分享純圖到QQ空間
doShareToQQ(params);
}
public void shareOnlyImageOnQQ(View view) {
final Bundle params = new Bundle();
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/a.png"));
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用");
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
// params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打開這句話。可以實現分享純圖到QQ空間
doShareToQQ(params);
}
private void doShareToQQ(final Bundle params) {
// QQ分享要在主線程作
ThreadManager.getMainHandler().post(new Runnable() {
@Override
public void run() {
if (null != mTencent) {
mTencent.shareToQQ(QQActivity.this, params, qqShareListener);
}
}
});
}
IUiListener qqShareListener = new IUiListener() {
@Override
public void onCancel() {
Util.toastMessage(QQActivity.this, "onCancel: ");
}
@Override
public void onComplete(Object response) {
// TODO Auto-generated method stub
Util.toastMessage(QQActivity.this, "onComplete: " + response.toString());
}
@Override
public void onError(UiError e) {
// TODO Auto-generated method stub
Util.toastMessage(QQActivity.this, "onError: " + e.errorMessage, "e");
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode, resultCode, data, qqShareListener);
}
}
咱們到官方文檔下載對應的官方demo而且多看看項目的ReadeMe。寫的很是具體讓你少走彎路。
解壓後項目結構如圖所看到的:
假設是第一次集成。咱們可以直接執行WeiboSDKDemo_v3.1.4.apk先查看效果,這樣也方便你對他的功能和效果有一個大概瞭解,當如也可以直接導入demo-src文件夾如下的代碼,
經過這樣的方式執行project時,請務必替換默認的 debug.keystore文件,不然沒法正確的受權成功。
另外,該debug.keysotre 是新浪官方的,除了編譯執行官方 DEMO 外,請不要直接使用它,出於安全的考慮。您應該爲本身的應用提供一份 keysotre。
在C:\Users\XXXXX.android文件夾下,把Android默認的debug.keystore替換成當前微博demo裏面提供debug.keystore。
在集成微博前,需要到新浪微博官網建立一個應用。在控制檯-基本信息菜單裏面填上包名和簽名,簽名經過簽名工具獲取工具這裏獲取
配置權限,假設已經加入了對應的權限。就不要反覆加入了
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
配置返回微博的activity
在進行微博分享前。需要在AndroidManifest.xml中,在需要接收消息的Activity(喚起微博主程序的類)裏聲明對應的Action:ACTION_SDK_REQ_ACTIVITY,例如如下所看到的:
<!--sina-->
<activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="adjustResize" android:exported="false" >
</activity>
<service android:name="com.sina.weibo.sdk.net.DownloadService" android:exported="false">
</service>
<!--\sina-->
<activity android:name=".activity.QQActivity">
</activity>
<activity android:name=".activity.SinaActivity">
<!-- 調用新浪原生SDK。需要註冊的回調activity -->
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在集成微博SDK前,有兩種方式來集成微博SDK:
在這裏我採用方式1。因爲我不需要登陸button和直接調用OpenAPI
WeiboMessage weiboMessage = new WeiboMessage();
ImageObject imageObject = new ImageObject();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
imageObject.setImageObject(bitmap);
weiboMessage.mediaObject = imageObject;
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
request.transaction = String.valueOf(System.currentTimeMillis());
request.message = weiboMessage;
mWeiboShareAPI.sendRequest(SinaActivity.this, request);
假設配置沒問題的話,到這一步已是可以分享得了,假設遇到什麼問題。請在下方評論,我必定會回覆的
package cn.woblog.testthirdpartyfunction.activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.sina.weibo.sdk.api.ImageObject;
import com.sina.weibo.sdk.api.WeiboMessage;
import com.sina.weibo.sdk.api.share.BaseResponse;
import com.sina.weibo.sdk.api.share.IWeiboHandler;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.SendMessageToWeiboRequest;
import com.sina.weibo.sdk.api.share.WeiboShareSDK;
import com.sina.weibo.sdk.constant.WBConstants;
import cn.woblog.testthirdpartyfunction.Constants;
import cn.woblog.testthirdpartyfunction.R;
public class SinaActivity extends AppCompatActivity implements IWeiboHandler.Response {
private IWeiboShareAPI mWeiboShareAPI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sina);
// 建立微博分享接口實例
mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);
// 註冊第三方應用到微博client中,註冊成功後該應用將顯示在微博的應用列表中。
// 但該附件欄集成分享權限需要合做申請。詳情請查看 Demo 提示
// NOTE:請務必提早註冊,即界面初始化的時候或是應用程序初始化時,進行註冊
mWeiboShareAPI.registerApp();
// 當 Activity 被又一次初始化時(該 Activity 處於後臺時。可能會因爲內存不足被殺掉了)。
// 需要調用 {@link IWeiboShareAPI#handleWeiboResponse} 來接收微博client返回的數據。
// 執行成功,返回 true,並調用 {@link IWeiboHandler.Response#onResponse};
// 失敗返回 false。不調用上述回調
if (savedInstanceState != null) {
mWeiboShareAPI.handleWeiboResponse(getIntent(), this);
}
}
public void testShareImage(View view) {
WeiboMessage weiboMessage = new WeiboMessage();
ImageObject imageObject = new ImageObject();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
imageObject.setImageObject(bitmap);
weiboMessage.mediaObject = imageObject;
SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
request.transaction = String.valueOf(System.currentTimeMillis());
request.message = weiboMessage;
mWeiboShareAPI.sendRequest(SinaActivity.this, request);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 從當前應用喚起微博並進行分享後。返回到當前應用時,需要在此處調用該函數
// 來接收微博client返回的數據;執行成功,返回 true,並調用
// {@link IWeiboHandler.Response#onResponse}。失敗返回 false,不調用上述回調
mWeiboShareAPI.handleWeiboResponse(intent, this);
}
/** * 接收微client博請求的數據。 * 當微博client喚起當前應用並進行分享時,該方法被調用。
* * @param baseResp 微博請求數據對象 * @see {@link IWeiboShareAPI#handleWeiboRequest} */ @Override public void onResponse(BaseResponse baseResp) { if (baseResp != null) { switch (baseResp.errCode) { case WBConstants.ErrorCode.ERR_OK: Toast.makeText(this, "success", Toast.LENGTH_LONG).show(); break; case WBConstants.ErrorCode.ERR_CANCEL: Toast.makeText(this, "cancel", Toast.LENGTH_LONG).show(); break; case WBConstants.ErrorCode.ERR_FAIL: Toast.makeText(this, "Error Message: " + baseResp.errMsg, Toast.LENGTH_LONG).show(); break; } } } }
說道微信又不得不吐槽了,要想得到微信登陸。還得是企業帳戶才幹申請。還得交錢,你說這叫什麼事
首先我打開微信開發人員官網,註冊個帳號或者用已有的帳號登陸,在管理中心建立應用並提交審覈,審完完畢例如如下圖。
可以看到咱們已經得到,分享到朋友圈或朋友的權限,微信登陸等還需要申請。那我現在僅僅有先測試分享了
首先咱們來到開發人員官網文檔下載對應的sdk和開發文檔
這當中我僅僅下載了例如如下sdk
第一個是:獲取簽名的,只是我感受不太好用,因爲他沒有複製簽名的button,每次還得照着一個一個打出來,我推薦用微博的簽名工具
第二個是:使用微信分享、登陸、收藏、支付等功能需要的庫以及文件
第三個是:範例代碼。包括了一個完整的範例project。該範例的使用可以參閱Android平臺上手指南
首先咱們用eclipse導入演示樣例代碼,替換當前文件夾下的keystore。而後執行就可以查看相關演示樣例
如下咱們就應該來安裝官方文檔來集成sdk了
首先在官網建立一個應用。獲取到AppId,而後把剛剛下載的sdk包裏面的libammsdk.jar複製到你的項目libs文件夾下。並加入到path(假設需要)
配置權限:
講到這裏,有的吐槽了,你看看這個排版,簡直是差評
在看看咱們如下的代碼。這排版,這樣是,一看就是很是帥的人寫的~~
<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"/>
配置activity
因爲咱們要接受微信分享的一些信息,比方:分享成功或失敗
這一步很是重要,配置錯誤將收不到消息,在你的包名根文件夾下建立wxapi包。而後在該包下建立activity命名爲WXEntryActivity並實現IWXAPIEventHandler接口,基本代碼例如如下:
package cn.woblog.testthirdpartyfunction.wxapi;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import cn.woblog.testthirdpartyfunction.R;
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);
}
// 微信發送請求到第三方應用時,會回調到該方法
@Override
public void onReq(BaseReq baseReq) {
}
// 第三方應用發送到微信的請求處理後的響應結果,會回調到該方法
@Override
public void onResp(BaseResp baseResp) {
}
}
載清單文件中配置你的activity
<activity android:name=".wxapi.WXEntryActivity" android:exported="true">
</activity>
建立實例,並註冊到微信
「`java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);
//假設分享的時候。該界面沒有開啓,那麼微信開始這個activity時,會調用onCreate。因此這裏要處理微信的返回結果 WxActivity.api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//假設分享的時候,該已經開啓,那麼微信開始這個activity時。會調用onNewIntent,因此這裏要處理微信的返回結果
setIntent(intent);
WxActivity.api.handleIntent(intent, this);
}
## 分享圖片
```java
/** * @param isShareFriend true 分享到朋友。false分享到朋友圈 */
private void share2Wx(boolean isShareFriend) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
WXImageObject imgObj = new WXImageObject(bitmap);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true);//縮略圖大小
bitmap.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true); // 設置縮略圖
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = isShareFriend ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
api.sendReq(req);
}
<div class="se-preview-section-delimiter"></div>
這裏就簡單了。直接調用上面的方法
share2Wx(true);
share2Wx(false);
<div class="se-preview-section-delimiter"></div>
這裏是這個分享的完整代碼
package cn.woblog.testthirdpartyfunction.activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXImageObject;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.platformtools.Util;
import cn.woblog.testthirdpartyfunction.Constants;
import cn.woblog.testthirdpartyfunction.R;
public class WxActivity extends AppCompatActivity {
private static final int THUMB_SIZE = 150;
public static IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wx);
// 經過WXAPIFactory工廠,獲取IWXAPI的實例
api = WXAPIFactory.createWXAPI(this, Constants.WX_APP_ID, false);
// 將該app註冊到微信
api.registerApp(Constants.WX_APP_ID);
}
/** * 分享一張圖片到朋友 * * @param view */
public void testShareImage2friend(View view) {
share2Wx(true);
}
/** * 分享一張圖片到朋友圈 * * @param view */
public void testShareImage2friends(View view) {
share2Wx(false);
}
/** * @param isShareFriend true 分享到朋友,false分享到朋友圈 */
private void share2Wx(boolean isShareFriend) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
WXImageObject imgObj = new WXImageObject(bitmap);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, THUMB_SIZE, THUMB_SIZE, true);//縮略圖大小
bitmap.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true); // 設置縮略圖
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = isShareFriend ?SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline; api.sendReq(req); } private String buildTransaction(final String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); } }
另外說點題外話。鑑於我是有點強迫症的人,因此在代碼以及文字的組織和代碼的格式化都保持良好的風格,特別是代碼的格式,我都是每次先本身寫一遍,而後在從開發工具裏拷貝出來。有時還得按tad一點一點點縮進(假設哪位大神有更好的方法。但願不吝賜教下)。才貼到這上面了,覺得我認爲既然要寫博客就要寫好,這要纔對別人有幫助,在我認爲假設文字排版或者代碼格式亂亂的,就是耍流氓。
上面的測試的代碼我放到github了,有什麼問題可以直接評論或者在github上建立issure
假設個人文章對來帶來的幫助,可加我微信。微博,QQ什麼啥的交個朋友也是不錯的。另外微信。微博都會不按期發一些優質的文章,感謝你們的支持~~