原生分享代碼沒有錯仁锯,但是總是分享失敗
Android分享圖片的分享代碼如下
public static void shareImages(Context context, ArrayList<Uri> uriList){
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
shareIntent.setType("image/*");
context.startActivity(shareIntent);
}
其中uriList為你要分享的uri鏈接业崖,就可以完成Android默認(rèn)分享了。
上面的代碼是沒有問題的双炕,但是為什么分享不成功呢?
于是乎妇斤,我用上面的代碼分享一個本地的圖片,分享成功了荸恕,但是為什么偏偏這個工程中分享失敗呢死相,我就去找自己分享的圖片,發(fā)現(xiàn)圖片都是-xxxxxxxx的數(shù)字命名的算撮。因為我分享的類型是.setType("image/*")县昂,是個圖片類型茅糜,但是這個緩存里面下載下來的不是圖片的格式。
因為我的工程里面使用的是UniversalImageLoader加載圖片的狸驳,這些圖片緩存在本地文件夾下,但是他們都不是圖片的文件格式耙箍,所以你在分享的時候總會分享失敗酥馍。因此需要對UniversalImageLoader的緩存文件進(jìn)行處理。
- 將緩存下來的圖片重新命名:
public class UniversalImageLoaderConfiguration {
public static void configure(Context context, int defaultImage) {
configure(context, defaultImage, defaultImage, defaultImage);
}
public static void configure(Context context, int emptyUriImage, int failImage, int loadingImage) {
DisplayImageOptions defaultOptions = (new DisplayImageOptions.Builder()).showImageForEmptyUri(emptyUriImage).showImageOnFail(failImage).showImageOnLoading(loadingImage).cacheInMemory(true).cacheOnDisk(true).build();
ImageLoaderConfiguration config = (new com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder(context)).defaultDisplayImageOptions(defaultOptions).writeDebugLogs().diskCacheFileNameGenerator(new UniversalImageLoaderImagePath()).build();
ImageLoader.getInstance().init(config);
}
}
public class UniversalImageLoaderImagePath implements FileNameGenerator {
@Override
public String generate(String imageUri) {
return String.valueOf(imageUri.hashCode()+".png");
}
}
上面的代碼是將緩存的圖片文件以圖片文件的形式保存在本地汁针。
- 最后在application配置UniversalImageLoader
UniversalImageLoaderConfiguration.configure(getApplicationContext(), R.drawable.huise);
至此砚尽,解決了原生分享圖片,圖片分享失敗的必孤。