使用rxjava2 进行多图分享和保存

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值