史上最具體Android集成QQ,微信,微博分享(不用第三方)持續更新中

現在項目中用個第三方登陸。或分享已經不是什麼稀奇事了。但是要想把這個功能作好,那可就不easy了。預計到這裏就有人會說了,扯犢子,這玩意,我用第三方sdk,什麼umeng,sharesdk分分鐘給你作出來,但是這些第三方sdk僅僅有對項目的分享要求不高的時候才適合,假設要定製分享,那我就僅僅能呵呵。儘管第三方登陸或分享沒什麼技術難度,但是各類配置,而且每一個都不太同樣,少配置一個地方代碼就通只是了,因此基於上問題。特寫此文以備不時之需。java

好。上面扯太多了。現在正式上代碼,咱們先從QQ入手,你問爲何,因爲他最簡單呀android

QQ

下載sdk並執行demo

首先不得不吐槽一個問題,就是騰訊的文檔是最全的,全的你都找不到在哪裏,點擊這裏可以查看官方文檔這裏下載官方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

現在咱們需要在分享或登陸的過程當中拿到一些狀態,就需要用到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裏面複製。本文主要內容是。記錄一些配置。而並不是貼代碼

分享到QQ

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

分享到QZONE

截止到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);
    }
}

Sina(微博)

咱們到官方文檔下載對應的官方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前,有兩種方式來集成微博SDK:

  • 直接導入weibosdkcore.jar:適用於僅僅需要受權、分享、網絡請求框架功能的項目
  • 引用WeiboSDKproject(Library):適用於微博受權、分享,以及需要登錄button、調用OpenAPI的項目

在這裏我採用方式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什麼啥的交個朋友也是不錯的。另外微信。微博都會不按期發一些優質的文章,感謝你們的支持~~

這裏寫圖片描寫敘述

這裏寫圖片描寫敘述

這裏寫圖片描寫敘述

相關文章
相關標籤/搜索