您可以从Android上的“照片”应用内容提供商获取原始图像文件吗?

问题描述

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

以下情况正常工作,并且已成功读取EXIF数据:

  • 将照片从Google相册应用共享到此应用;
  • 使用以下代码,从本地存储中打开照片;
  • 使用以下代码,打开存储在Google云端硬盘中的照片。

虽然无效,但正在使用该代码打开由Google相册应用提供的图像文件

图像本身可以正确显示,但是缺少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();
    }
  }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...