java - 您可以从 Android 上的照片应用内容提供商获取原始图像文件吗?
问题描述
我正在玩一个应用程序,除其他外,它有一个从图库中选择图像的按钮。然后它继续查看这些图像中的 EXIF 数据以进行额外处理。
以下场景正常工作,成功读取 EXIF 数据:
- 将 Google 照片应用中的照片分享到此应用;
- 使用如下代码,从本地存储中打开一张照片;
- 使用以下代码,打开存储在 Google Drive 上的照片。
但是,不起作用的是使用该代码打开 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();
}
}
}
解决方案
推荐阅读
- c# - 将 PowerShell 中的加密/解密函数转换为 PHP (openssl_)
- javascript - ScriptManager.RegisterStartupScript 仅在 foreach 循环中被调用一次
- reactjs - 将 div 的引用传递给同一渲染函数中的组件
- python - 检测csv中的转义字符
- javascript - Cheerio 在脚本标签中查找文本
- javascript - 在 Ruby on Rails 表单中使用 Materialize `chip` 和 `autocomplete` 和关联模型
- sql - 调用过程中的参数数量或类型错误 (PLS00306)
- powershell - 从linux执行powershell脚本到windows机器
- python - 在python中绘制旋转/下降线
- bash - 查找我的 Git Bash 执行的 PATH