有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java你能从Android上的照片应用程序内容提供商那里获得原始图像文件吗?

我正在玩一个应用程序,其中有一个按钮可以从图库中选择图像。然后,它继续查看这些图像中的EXIF数据,以进行额外处理

在成功读取EXIF数据的情况下,以下场景正常工作:

  • 将谷歌照片应用程序中的照片共享到此应用程序
  • 使用如下代码,从本地存储中打开一张照片
  • 使用如下代码,打开存储在Google Drive上的照片

但不起作用的是,使用该代码打开谷歌照片应用程序提供的图像文件

图像本身显示正确,但缺少EXIF标记。请注意,从照片到我的应用程序的共享确实有效,并且在我可以看到的照片应用程序中没有打开任何编辑设置

我想知道是否有人碰到过这个问题,是否有解决办法

package com.example.somepackage;

import 安卓.app.Activity;
import 安卓.content.Intent;
import 安卓.net.Uri;

import java.io.InputStream;

import 安卓x.annotation.Nullable;
import 安卓x.exifinterface.media.ExifInterface;
import 安卓x.fragment.app.Fragment;

// snippet pieced together from working code
public class SomeFragment extends Fragment {

  private static final int REQUEST_PICK_FROM_GALLERY = 100;

  // ............

  // Called from an event handler
  public void pickFromGallery() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    startActivityForResult(intent, REQUEST_PICK_FROM_GALLERY);
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    switch (requestCode) {
      case REQUEST_PICK_FROM_GALLERY:
        if (resultCode == Activity.RESULT_OK) {

          Uri uri = data.getData();
          readExifData(uri);

        }
        break;
    }
    super.onActivityResult(requestCode, resultCode, data);
  }

  private void readExifData(Uri uri) {
    try (InputStream is = getContext().getContentResolver().openInputStream(uri)) {
      ExifInterface exif = new ExifInterface(is);

      // Do something useful.
      安卓.util.Log.w("Test", "Camera make: " + exif.getAttribute(ExifInterface.TAG_MAKE));

    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

}

共 (0) 个答案