android開發之&整合qq分享的那些坑
阿新 • • 發佈:2019-01-07
前段時間公司要整合qq分享,雖說都知道騰訊的的文件寫的坑多,但是沒辦法,只能硬著頭皮往上衝。
首先我們需要先下載qq的sdk,我用的是基礎版本open_sdk_r5788_lite.jar,之後匯入到工程,這個就不說了,接下來需要在清單檔案中申請許可權,這個也不說了,騰訊文件上都有。
之後在application標籤下寫上
<activity android:name="com.tencent.tauth.AuthActivity" android:noHistory="true" android:launchMode="singleTask" > <intent-filter><action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tencentAPP_ID" /> </intent-filter> </activity><activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize" />
這兩個activity必須要寫,否則無法成功,
<data android:scheme="tencentAPP_ID" />
一定要注意這裡,在app_id前面加上tencent,否則分享之後收不到結果,也不知道騰訊為啥要這樣幹。
接下來建立例項,在程式碼中新增
mTencent = Tencent.createInstance("APP_ID", this.getApplicationContext());
實現回撥
class MyIUiListener implements IUiListener{ @Override public void onComplete(Object o) { Toast.makeText(InviteFriendActivity.this, "分享成功!", Toast.LENGTH_SHORT).show(); } @Override public void onError(UiError uiError) { Toast.makeText(InviteFriendActivity.this, uiError.errorMessage, Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { Toast.makeText(InviteFriendActivity.this, "分享取消!", Toast.LENGTH_SHORT).show(); } }
接受分享結果的時候要注意,需要在呼叫介面的Activity的onActivityResult方法中增加如下程式碼:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (null != mTencent) { Tencent.onActivityResultData(requestCode, resultCode, data, listener); } }
其中onActivityResultData介面中的listener為當前呼叫的Activity所實現的相應回撥UIListener。
最後就是喚醒qq,進行分享了,當時按照qq的文件來,各種報錯,也不知道為啥,後來在網上查了下,現在把程式碼貼出來共享一下
public class ShareUtils { /** * (2) 分享純圖片 * QQShare.SHARE_TO_QQ_KEY_TYPE 必選 Int 分享型別,分享純圖片時填寫QQShare.SHARE_TO_QQ_TYPE_IMAGE。 * QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL 必選 String 需要分享的本地圖片路徑。 * QQShare.SHARE_TO_QQ_APP_NAME 可選 String 手Q客戶端頂部,替換“返回”按鈕文字,如果為空,用返回代替。 * QQShare.SHARE_TO_QQ_EXT_INT 可選 Int 分享額外選項,兩種型別可選(預設是不隱藏分享到QZone按鈕且不自動開啟分享到QZone的對話方塊): * QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動開啟分享到QZone的對話方塊。 * QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕。 */ public static void onClickShare(Tencent mTencent, Activity activity, IUiListener listener) { Bundle params = new Bundle(); // params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL,imageUrl.getText().toString()); // params.putString(QQShare.SHARE_TO_QQ_APP_NAME, appName.getText().toString()); 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); mTencent.shareToQQ(activity, params, listener); } /** * (3) 分享音樂 * QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的型別。分享音樂填Tencent.SHARE_TO_QQ_TYPE_AUDIO。 * QQShare.PARAM_TARGET_URL 必選 String 這條分享訊息被好友點選後的跳轉URL。 * QQShare.SHARE_TO_QQ_AUDIO_URL 必填 String 音樂檔案的遠端連結, 以URL的形式傳入, 不支援本地音樂。 * QQShare.PARAM_TITLE 必選 String 分享的標題, 最長30個字元。 * QQShare.PARAM_SUMMARY 可選 String 分享的訊息摘要,最長40個字元。 * QQShare.SHARE_TO_QQ_IMAGE_URL 可選 String 分享圖片的URL或者本地路徑。 * QQShare.SHARE_TO_QQ_APP_NAME 可選 String 手Q客戶端頂部,替換“返回”按鈕文字,如果為空,用返回代替。 * QQShare.SHARE_TO_QQ_EXT_INT 可選 Int 分享額外選項,兩種型別可選(預設是不隱藏分享到QZone按鈕且不自動開啟分享到QZone的對話方塊): * QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動開啟分享到QZone的對話方塊。 * QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕。 */ public static void onClickAudioShareImage(Tencent mTencent, Activity activity, IUiListener listener) { final Bundle params = new Bundle(); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_AUDIO); params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的標題"); params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要"); params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.baidu.com"); params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://gaopin-img.bj.bcebos.com/chinacity.jpg"); params.putString(QQShare.SHARE_TO_QQ_AUDIO_URL, "音樂連結"); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用222222"); params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); mTencent.shareToQQ(activity, params, listener); } /** * (4) 分享應用 * QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的型別。分享音樂填Tencent.SHARE_TO_QQ_TYPE_PP。 * QQShare.PARAM_TITLE 必選 String 分享的標題, 最長30個字元。 * QQShare.PARAM_SUMMARY 可選 String 分享的訊息摘要,最長40個字元。 * QQShare.SHARE_TO_QQ_IMAGE_URL 可選 String 分享圖片的URL或者本地路徑。 * QQShare.SHARE_TO_QQ_APP_NAME 可選 String 手Q客戶端頂部,替換“返回”按鈕文字,如果為空,用返回代替。 * QQShare.SHARE_TO_QQ_EXT_INT 可選 Int 分享額外選項,兩種型別可選(預設是不隱藏分享到QZone按鈕且不自動開啟分享到QZone的對話方塊): * QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動開啟分享到QZone的對話方塊。 * QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕。 */ public static void onClickAppShare(Tencent mTencent, Activity activity, IUiListener listener) { final Bundle params = new Bundle(); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_APP); params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的標題"); params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要"); params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://gaopin-img.bj.bcebos.com/chinacity.jpg"); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "測試應用"); mTencent.shareToQQ(activity, params, listener); } /** * 1) 分享圖文訊息 * QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的型別。圖文分享(普通分享)填Tencent.SHARE_TO_QQ_TYPE_DEFAULT * QQShare.PARAM_TARGET_URL 必填 String 這條分享訊息被好友點選後的跳轉URL。 * QQShare.PARAM_TITLE 必填 String 分享的標題, 最長30個字元。 * QQShare.PARAM_SUMMARY 可選 String 分享的訊息摘要,最長40個字。 * QQShare.SHARE_TO_QQ_IMAGE_URL 可選 String 分享圖片的URL或者本地路徑 * QQShare.SHARE_TO_QQ_APP_NAME 可選 String 手Q客戶端頂部,替換“返回”按鈕文字,如果為空,用返回代替 * QQShare.SHARE_TO_QQ_EXT_INT 可選 Int 分享額外選項,兩種型別可選(預設是不隱藏分享到QZone按鈕且不自動開啟分享到QZone的對話方塊): * QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享時自動開啟分享到QZone的對話方塊。 * QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享時隱藏分享到QZone按鈕 */ public static void shareToQQ(Tencent mTencent, Activity activity, IUiListener listener) { Bundle params = new Bundle(); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE,QQShare.SHARE_TO_QQ_TYPE_DEFAULT); params.putString(QQShare.SHARE_TO_QQ_TITLE, "標題");// 標題 params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");// 摘要 params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,"http://www.baidu.com");// 內容地址 params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://gaopin-img.bj.bcebos.com/chinacity.jpg");// 網路圖片地址 params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "應用名稱");// 應用名稱 params.putString(QQShare.SHARE_TO_QQ_EXT_INT, "其它附加功能"); // 分享操作要在主執行緒中完成 mTencent.shareToQQ(activity, params, listener); } /** * 1.14 分享到QQ空間 * QzoneShare.SHARE_TO_QZONE_KEY_TYPE 選填 Int SHARE_TO_QZONE_TYPE_IMAGE_TEXT(圖文) * QzoneShare.SHARE_TO_QQ_TITLE 必填 分享的標題,最多200個字元。 * QzoneShare.SHARE_TO_QQ_SUMMARY 選填 String 分享的摘要,最多600字元。 * QzoneShare.SHARE_TO_QQ_TARGET_URL 必填 String 需要跳轉的連結,URL字串。 * QzoneShare.SHARE_TO_QQ_IMAGE_URL 選填 String 分享的圖片, 以ArrayList<String>的型別傳入,以便支援多張圖片(注:圖片最多支援9張圖片,多餘的圖片會被丟棄) */ public static void shareToQZone(Tencent mTencent, Activity activity, IUiListener listener) { Bundle params = new Bundle(); params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE,QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT); params.putString(QzoneShare.SHARE_TO_QQ_TITLE, "標題");// 標題 params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");// 摘要 params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL,"http://www.baidu.com");// 內容地址 ArrayList<String> imgUrlList = new ArrayList<>(); imgUrlList.add("http://gaopin-img.bj.bcebos.com/chinacity.jpg"); params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL,imgUrlList);// 圖片地址 // 分享操作要在主執行緒中完成 mTencent.shareToQzone(activity, params,listener); } }最後還有個坑,就是分享的url地址中一定要加入http:// 不加這個的話,分享的時候會提示tagURL錯誤。
OK了,大家如果發現那裡有問題可以提出來