android 实现微信分享多张图片的功能
昨天公司老大通知客戶改需求了,原來的微信分享改成分享多張圖片,然后屁顛屁顛跑到微信平臺看了以后
心里千萬只草泥馬狂奔而過,微信平臺沒有提供分享多張的SDK有木有啊,我們只能自己調(diào)用系統(tǒng)自帶的分享功能實(shí)現(xiàn)。
這兒我先講下流程,后面會附上源碼。
首先我們講下調(diào)起微信分享的方法。其實(shí)方法都是一樣的,沒有太大的區(qū)別。
?
//com.tencent.mm.ui.tools.ShareImgUi? ?是分享到微信好友
//com.tencent.mm.ui.tools.ShareToTimeLineUI ?是分享到微信朋友圈
//intent.put("kdescription","分享朋友圈的圖片說明");
?
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm","com.tencent.mm.ui.tools.ShareImgUi");
intent.setComponent(comp);
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*");
?
ArrayList(Uri) imageUris = new ArrayList<Uri>();
for(File f : files){
imageUris.add(Uri.fromFile(f));
}
?
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,imageUris);
startActivity(intent);
?
其實(shí)來說分享的代碼很簡單。但是實(shí)際操作中就跳了更多的坑,我一個(gè)一個(gè)的記錄下來。
?
實(shí)際分享的時(shí)候因?yàn)槭钦{(diào)用系統(tǒng)本地的分享功能,所以分享的圖片也就必須要存到本地,不然就會提示獲取資源失敗,只支持分享到朋友圈等等的問題。
那就要把圖片存到本地了,這個(gè)方法網(wǎng)上也有很多,我這兒就直接用了網(wǎng)上一個(gè)朋友的代碼,然后稍微修改了一下,后面附上代碼。
?
因?yàn)榭紤]到如果存的圖片太多就太占內(nèi)存了,所以最多設(shè)置分享9張,每次調(diào)起分享的時(shí)候都會從iv_share_1.jpg開始
這個(gè)是直接調(diào)用微信的分享,所以調(diào)起分享的時(shí)候一定要判斷手機(jī)里面是否已經(jīng)安裝了微信,如果沒有安裝還要掉微信分享就是直接崩潰掉。
?
都到了這一步就已經(jīng)能調(diào)起微信的多張圖片分享了,但是其中還是會有一個(gè)坑,也是卡了我不少時(shí)間。那就是android N系統(tǒng)以后分享的鏈接用file://.....
的時(shí)候會出現(xiàn)一個(gè)異常android.os.FileUriExposedException。網(wǎng)上雖然很多朋友都給出了用 v4包中的FileProvider來解決,但是不知道為什么,反正我的
項(xiàng)目導(dǎo)入后就報(bào)錯(cuò)了,最后在網(wǎng)上找了另一個(gè)方法在項(xiàng)目的BaseApplication的onCreate中用VmPolicy的方法解決。
?
//解決android N(>=24)系統(tǒng)以上分享 路徑為file://時(shí)的 android.os.FileUriExposedException異常 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();StrictMode.setVmPolicy(builder.build()); }?
到這兒以后就搞定了微信的多張圖片分享。下面就貼出我的代碼,希望對大家有所幫助。
布局中就放入了兩個(gè)按鈕,通過按鈕傳遞一個(gè)參數(shù)判斷是分享朋友圈還是微信好友
MainActivity中的代碼
?
/** * * @param flag 0分享給微信好友 1分享到朋友圈 */ private void shareImage(final int flag) {//判斷是否安裝微信,如果沒有安裝微信 又沒有判斷就直達(dá)微信分享是會掛掉的if (!Tools.isWeixinAvilible(mContext)){Toast.makeText(MainActivity.this, "您還沒有安裝微信", Toast.LENGTH_SHORT).show();}else{new Thread(new Runnable() {@Overridepublic void run() {//這一步一定要clear,不然分享了朋友圈馬上分享好友圖片就會翻倍files.clear();try {for (int i = 0; i < stringItem.length; i++) {File file = Tools.saveImageToSdCard(mContext, stringItem[i]);files.add(file);}Intent intent = new Intent();ComponentName comp;if (flag == 0) {comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");} else {comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");intent.putExtra("Kdescription", "分享朋友圈的圖片說明");}intent.setComponent(comp);intent.setAction(Intent.ACTION_SEND_MULTIPLE);intent.setType("image/*");ArrayList<Uri> imageUris = new ArrayList<Uri>();for (File f : files) {imageUris.add(Uri.fromFile(f));}intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);startActivity(intent);}catch (Exception e){e.printStackTrace();}}}).start();}}?
?
然后就是調(diào)用Tools工具類中的或取臨時(shí)保存的圖片的地址。
?
public static String IMAGE_NAME = "iv_share_"; public static int i =0;//根據(jù)網(wǎng)絡(luò)圖片url路徑保存到本地 public static final File saveImageToSdCard(Context context, String image) {boolean success = false;File file = null;try {file = createStableImageFile(context);Bitmap bitmap = null;URL url = new URL(image);HttpURLConnection conn = null;conn = (HttpURLConnection) url.openConnection();InputStream is = null;is = conn.getInputStream();bitmap = BitmapFactory.decodeStream(is);FileOutputStream outStream;outStream = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);outStream.flush();outStream.close();success = true;} catch (Exception e) {e.printStackTrace();}if (success) {return file;} else {return null;} }//創(chuàng)建本地保存路徑public static File createStableImageFile(Context context) throws IOException {i++;String imageFileName =IMAGE_NAME + i+ ".jpg";File storageDir = context.getExternalCacheDir();File image = new File(storageDir, imageFileName);return image;}?
至于判斷是否安裝了微信這個(gè)大家在網(wǎng)上隨便搜搜都能找到。
?
這樣就大功告成了。分享都不用去等待微信平臺的審核了。但是因?yàn)槭钦{(diào)用系統(tǒng)的分享,所以也有不足的地方,那就是沒有回調(diào)。
?
地址:https://github.com/XW837156540/ShareMoreImage
https://blog.csdn.net/XuWei1213/article/details/78547684
轉(zhuǎn)載于:https://www.cnblogs.com/wcLT/p/8890551.html
總結(jié)
以上是生活随笔為你收集整理的android 实现微信分享多张图片的功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件分块上传
- 下一篇: 翻译:XtraDB/InnoDB中的AU