Android 10 上传图片适配

本次适配,不添加android:requestLegacyExternalStorage="true" ,过程都用原生系统代码

 

1.首先选择图片

                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("image/*");
                startActivityForResult(intent, 111);

2.接受图片Uri

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
         if (requestCode == 111) {
            if (data != null) {
                Uri uri = data.getData();
            }
        }
    }

3.Uri转成byte[]

        InputStream inputStream = null;
        byte[] buffer=new byte[0];
        try {
            inputStream = context.getContentResolver().openInputStream(uri);
            buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }

4.接口上传图片

        RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), buffer);
        MultipartBody.Part body = MultipartBody.Part.createFormData("file",uri.getPath(),requestBody);
        App.app().getBpService().uploadoss(body)
                .compose(RxUtil.io2main())
                .subscribe();

还有其他工具类函数

 

获取图片Bitmap

    public static Bitmap getBitmapFromUri(Context context, Uri uri) throws IOException {
        ParcelFileDescriptor parcelFileDescriptor =
                context.getContentResolver().openFileDescriptor(uri, "r");
        FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
        Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        parcelFileDescriptor.close();
        return image;
    }

保存图片

    public static void saveBitmapToFile(Context context, Bitmap bitmap, String title, String discription) {
        MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, title, discription);
    }

 

 

 

 

 

 

  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值