首页 > 解决方案 > 您可以从 Android 上的照片应用内容提供商获取原始图像文件吗?

问题描述

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

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

但是,不起作用的是使用该代码打开 Google Photos 应用程序提供的图像文件。

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

我想知道是否有人遇到过这个问题以及是否有解决方法。

package com.example.somepackage;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;

import java.io.InputStream;

import androidx.annotation.Nullable;
import androidx.exifinterface.media.ExifInterface;
import androidx.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.
      android.util.Log.w("Test", "Camera make: " + exif.getAttribute(ExifInterface.TAG_MAKE));

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

}

标签: javaandroidgoogle-photos

解决方案


推荐阅读