首页 > 解决方案 > 从谷歌驱动器获取图像时位图返回空

问题描述

我正在通过存储访问框架从谷歌驱动器获取图像并将其转换为位图。它在我在棉花糖上运行的 Galaxy A5 中运行良好,但在我在 Oreo 位图上运行的红米 6A 中返回为空。我的代码如下

 uri = resultData.getData();
 isImageFromGoogleDrive = "com.google.android.apps.docs.storage".equals(Objects.requireNonNull(uri).getAuthority());

  if(isImageFromGoogleDrive){
  InputStream inputStream;
  try {
     inputStream = getBaseContext().getContentResolver().openInputStream(uri);
     Bitmap bm = BitmapFactory.decodeStream(inputStream);

红米6A Oreo上bm的值为空

标签: androidbitmap

解决方案


你可以这样做:

        if (resultCode == RESULT_OK && requestCode == SELECT_IMAGE_REQUEST_CODE) {
            Uri selectedImageUri = imageReturnedIntent.getData();
            try (InputStream inputStream = sender.getContentResolver().openInputStream(selectedImageUri )) {
               Files.copy(inputStream, "your_path_here", StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException ex) {
               Toast.makeText(sender, "A problem has occurred while importing image", Toast.LENGTH_SHORT).show();
               Log.e(TAG, "error copying files:" + ex.getMessage());
               return;
            }
        }

您不能像使用 SDCARD 中的一张图像那样只拍摄图像,因此您需要使用 Streams 将该文件复制到内存中(临时或非临时)。此代码会将图像复制到路径,然后你可以用它做你想做的事。


推荐阅读