? ? ? ?由于微信沒有開放分享多張圖片的接口給開發(fā)者务荆,而產(chǎn)品又想要分享多圖,shareSDK第三方分享只有目前做了繞過審核分享一張的代碼穷遂,這時候我們只能通過去反編譯微信得到相應(yīng)的入口函匕。Android下可以直接使用系統(tǒng)的分享,直接調(diào)用微信的分享朋友圈的Activity蚪黑,通過Intent進行傳遞數(shù)據(jù)盅惜。這種方式其實是因為微信實現(xiàn)了Android系統(tǒng)分享的Intent Action的規(guī)則中剩。
規(guī)則一:
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
規(guī)則二:
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/*"/>
通過清單文件我們可以發(fā)現(xiàn)微信接受規(guī)則有兩個,一個我們猜測是單個圖片抒寂,另外一個是多圖模式结啼,通過代碼驗證,確實跟我們的猜測一樣屈芜。
接下來奉獻出我的分享圖片代碼郊愧,首先是分享單張圖片的代碼
public static void sharePicToWXFriendCircle(Context context, String description, String PicPath) {
if (!isInstallWeChart(context)) {
Toast.makeText(context,"您沒有安裝微信",Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"));
//? ? ? ? intent.setAction("android.intent.action.SEND_MULTIPLE");
intent.setAction("android.intent.action.SEND");
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(PicPath))); //圖片數(shù)據(jù)(支持本地圖片的Uri形式)
intent.putExtra("Kdescription", description); //微信分享頁面,圖片上邊的描述
context.startActivity(intent);
}
分享多張圖片到朋友圈井佑,代碼如下:
public static void sharePicsToWXFriendCircle(Context context, String description, List paths) {
if (!isInstallWeChart(context)) {
Toast.makeText(context,"您沒有安裝微信",Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"));
intent.setAction("android.intent.action.SEND_MULTIPLE");
ArrayList imageList = new ArrayList();
for (String picPath : paths) {
File f = new File(picPath);
if (f.exists()) {
imageList.add(Uri.fromFile(f));
}
}
if(imageList.size() == 0){
Toast.makeText(context,"圖片不存在",Toast.LENGTH_SHORT).show();
return;
}
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, imageList); //圖片數(shù)據(jù)(支持本地圖片的Uri形式)
intent.putExtra("Kdescription", description); //微信分享頁面属铁,圖片上邊的描述
context.startActivity(intent);
}
分享圖片給好友代碼:
public static void sharePicToFriendNoSDK(Context context, String path) {
if(!isInstallWeChart(context)){
Toast.makeText(context,"您沒有安裝微信",Toast.LENGTH_SHORT).show();
return;
}
Intent intent =newIntent();
ComponentName comp =newComponentName("com.tencent.mm","com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(comp);
intent.setAction("android.intent.action.SEND");
intent.setType("image/*");
File f =newFile(path);
if(f.exists()){
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(newFile(path)));
}else{
Toast.makeText(context,"文件不存在",Toast.LENGTH_SHORT).show();
return;
}
context.startActivity(intent);
}
檢查手機是否安裝代碼:
/**檢查是否安裝微信
* @param context
* @return
*/
public static boolean isInstallWeChart(Context context){
PackageInfo packageInfo = null;
try {
packageInfo = context.getPackageManager().getPackageInfo("com.tencent.mm", 0);
} catch (Exception e) {
packageInfo = null;
e.printStackTrace();
}
if (packageInfo == null) {
return false;
} else {
return true;
}
}
以上就是通過繞過微信SDK的機制去分享多張圖片到微信朋友圈了。