DisposableObserver disposableObserver = Observable.just(images)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.map(list -> {
List<Bitmap> list1 = new ArrayList<>();
for (String str : list) {
list1.add(BitmapUtils.getBitMBitmap(str,mContext));
}
return list1;
}).map(bitmaps -> {
List<File> list1 = new ArrayList<>();
for (Bitmap bt : bitmaps) {
list1.add(BitmapUtils.saveShareImage(bt,path));
}
return list1;
}).map(list -> {
ArrayList<Uri> list1 = new ArrayList<>();
for (File fl : list) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
list1.add(getImageContentUri(mContext,fl));
} else {
list1.add(Uri.fromFile(fl));
}
}
return list1;
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<ArrayList<Uri>>() {
@Override
public void onNext(ArrayList<Uri> uris) {
callBack.downloadSuccess(uris);
}
@Override
public void onError(Throwable e) {
callBack.downloadFail(uris);
}
@Override
public void onComplete() {
}
});
compositeDisposable.add(disposableObserver);
public Uri getImageContentUri(Context context, File imageFile) {
String filePath = imageFile.getAbsolutePath();
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ",
new String[]{filePath}, null);
Uri uri = null;
if (cursor != null) {
if (cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
Uri baseUri = FileProvider.getUriForFile
(context, "com.xiaoshijie.fileProvider", imageFile);
uri = Uri.withAppendedPath(baseUri, "" + id);
}
cursor.close();
}
//如果使用fileProvider获取失败,则使用此方法获取Uri
if (uri == null) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, filePath);
uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
return uri;
}
public void doNativeShare(ArrayList<Uri> uris,String packet,String activity,boolean isTarget){
Intent intent = new Intent(Intent.ACTION_SEND);
if (isTarget) {
intent.setComponent(new ComponentName(packet, activity));
}
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*");
if (uris.size() > 0) {
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
mContext.startActivity(Intent.createChooser(intent, mContext.getString(R.string.app_name)));
}
public static Bitmap getBitMBitmap(String urlpath) {
Bitmap map = null;
try {
URL url = new URL(urlpath);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in;
in = conn.getInputStream();
map = BitmapFactory.decodeStream(in);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return map;
}
public static File saveShareImage(Bitmap bmp, String path) {
File appDir = new File(Environment.getExternalStorageDirectory(), path);
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
如有不足 ,还请多指教 1129795010@qq.com