起因來源于一次需求:
- 同時分享文字,圖片到微信朋友圈
- 同時分享文字,多張圖片到微信朋友圈
- 分享小視頻到微信朋友圈
本身覺得是一件簡單的事情,正常的一個場景,然而開始實作時,遇坑無數,則開始罵爹罵娘,因為這么正常的一個場景,微信官方竟然不支持,最最重要的是產品拿了樣品app,人家確實做到了,
微信分享sdk檔案
需求1:同時分享文字,圖片到微信朋友圈
首先分析,要做到圖文并茂分享到微信朋友圈肯定不是通過微信的分享sdk進行頁面跳轉的,我們可以試試Intent的形式直接跳轉
public static final void shareImagesToWechatCircleWithActionSend(@NonNull Context paramContext, @NonNull Uri paramUri, @NonNull String paramString) {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"));
intent.setType("image/*");
intent.setAction("android.intent.action.SEND");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("android.intent.extra.STREAM", (Parcelable)paramUri);
intent.putExtra("Kdescription", paramString);
intent.putExtra("android.intent.extra.TEXT", paramString);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
paramContext.startActivity(intent);
}
paramUri:本地圖片的uri
paramString:文本資料
可以發現通過該方式可以直接滿足需求1的要求,截圖如下:

需求2:同時分享文字,多張圖片到微信朋友圈
這個查閱了很多資料和參考了樣品app,確實微信7.0版本之后無法實作一次性分享多張圖片到微信朋友圈,7.0之前的可以這里不做說明,而樣品app則采用的是輔助功能,下載圖片到相冊,自動點擊+號按鈕幫用戶自動選取九宮格來變相的實作此需求,于是乎,功能照搬,
腦路模擬:下載圖片到相冊 —> 進入到微信的分享頁面 -> 找到+號按鈕,點擊 —> 找到彈窗,選中從相冊選擇 —> 進入到相冊頁面后,自動幫忙選中前9中圖片 —> 最后點擊右上角完成 —> 大功告成!!!
!!!萬事起源于+號按鈕!!!
細心的同學會發現,不論是通過微信分享sdk的方式還是直接intent跳轉的方式,進入到微信的朋友圈分享頁面是不會顯示后面的+號上傳按鈕的,只有微信用戶從朋友圈入口進來才會顯示,如圖:

這就涉及到了我的知識盲區了啊,通過adb shell sysdump activity | grep -i run 各種技巧最后發現樣品app分享到的微信朋友圈頁面的activity和我們先前寫的完全不一樣,最后總結出一下兩個函式供大家使用
/**
* 微信7.0之前的分享頁面,可以顯示+號按鈕,同時支持圖片,文字混合
* @param context
* @param paramUri
* @param paramString
*/
public static final void shareImagesToWechatCircleWithActionView(@NonNull Context context,@NonNull Uri paramUri, @NonNull String paramString) {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareScreenToTimeLineUI"));
intent.setAction("android.intent.action.VIEW");
intent.setDataAndType(paramUri, "image/*");
intent.putExtra("Kdescription", paramString);
intent.putExtra("android.intent.extra.TEXT", paramString);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
context.startActivity(intent);
}
/**
* 微信7.0版本之后的分享頁面,無法顯示+號,支持圖片,文字混合
* @param paramContext
* @param paramUri
* @param paramString
*/
public static final void shareImagesToWechatCircleWithActionSend(@NonNull Context paramContext, @NonNull Uri paramUri, @NonNull String paramString) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(WechatConstant.wechatPackageName, WechatConstant.sahreToTimeLineUiClassName));
intent.setType("image/*");
intent.setAction("android.intent.action.SEND");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("android.intent.extra.STREAM", (Parcelable)paramUri);
intent.putExtra("Kdescription", paramString);
intent.putExtra("android.intent.extra.TEXT", paramString);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
paramContext.startActivity(intent);
}

萬惡的+號問題終于顯示出來,上邊的腦路模擬就可以編碼實作了,
需求3:分享小視頻到微信朋友圈
通過微信分享sdk分享出來的小視頻是一個鏈接形式,用戶點擊該鏈接后則跳轉開始播放網頁視頻,而產品需要的是視頻流卡片形式,樣品app沒有實作視頻的分享功能,最后確定下來方案是先下載短視頻到本地,通過輔助功能自動幫助用戶選擇短視頻,
腦路模擬:下載短視頻到相冊 —> 進入到微信的分享頁面 -> 找到+號按鈕,點擊 —> 找到彈窗,選中從相冊選擇 —> 進入到相冊頁面后,點擊頂部的所有視頻分類 —> 自動幫忙選中前1個短視頻 —> 最后點擊右上角完成 —> 大功告成!!!
!!!又是萬惡的+號!!!
通過測驗發現,如果已經選中了一張圖片,往后點擊+號只能繼續選擇圖片,無法選中視頻,只有把選中的圖片都移除掉,才可以選擇短視頻,
問題二,想要來到微信朋友圈的分享頁面,必須要傳入imageUri,否則會報錯,資源無法加載,
最后采用的方案,是攜帶一張默認圖片,先來到微信朋友圈的分享頁面,后通過輔助功能將該張圖片移除,最后點擊+號開始選中短視頻,
1617270957726537
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/271604.html
標籤:其他
上一篇:Android 一種簡單的標題欄
