gpt4 book ai didi

java - 尝试从 DCIM 获取图片时出现奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 10:12:44 25 4
gpt4 key购买 nike

我正在尝试从 DCIM 在我的 Activity 中加载图片。我使用以下代码:

int BROWSE_PICTURES = 0;
public void openBrowsePictures() {
Intent i = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(i, BROWSE_PICTURES);
}

在 onActivityResult 中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == BROWSE_PICTURES && resultCode == RESULT_OK && null != data) { // we have bitmap from filesystem!
Uri selectedImage = data.getData();
Log.d("CAMERA","____"+selectedImage.toString());


String[] filePathColumn = {MediaStore.Images.Media.DATA};



Cursor cursor = getContentResolver().query(
selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
Log.d("CAMERA", " column : " + columnIndex);
String filePath = cursor.getString(columnIndex);
cursor.close();


Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);


Log.d("CAMERA", "----" + filePath);
}
}

当我尝试从文件系统加载拍摄的照片时,情况变得很奇怪。有用果然当a。我从 EasyScreenshot 文件中选择了一张图片,但是当 b.我从 DCIM/Camera 路径中选择图片它不起作用。如果我在 a 处运行代码 Log.d。案例打印:

CAMERA﹕ ____content://media/external/images/media/27487

和第二个 Log.d :

CAMERA﹕ ----/storage/emulated/0/Pictures/Screenshots/Screenshot_2014-12-18-15-14-22.png

但是,如果 b 它会打印以下内容:

第一个日志.d:

CAMERA: ____content://com.google.android.apps.photos.content/0/https%3A%2F%2Flh5.googleusercontent.com%2F7tUacBA_4oYS2Q8CmkINWHa93B_n7heNyt3OyVZgkY8%3Ds0-d

和第二个 log.d :

CAMERA﹕ ----null

我在运行 Android 5.0.1 的 nexus 4 设备上测试应用程序

提前致谢

最佳答案

您不能假定媒体选择器返回的 Uri 将对应于本地文件。您似乎正在选择设备中没有的 Google+ 照片或其他图片。

正确的方法是使用 ContentResolver以流的形式访问图片。例如:

InputStream inputStream = null;
if (ContentResolver.SCHEME_CONTENT.equals(selectedImage.getScheme())) {
inputStream = context.getContentResolver().openInputStream(selectedImage);
} else if (ContentResolver.SCHEME_FILE.equals(selectedImage.getScheme())) {
inputStream = new FileInputStream(selectedImage.getPath());
}

bitmap = BitmapFactory.decodeStream(inputStream);

这应该适用于 content://file:// uris。

并且(非常重要)确保从后台线程执行此操作(例如 AsyncTask),否则如果 uri 是“远程”,您将得到一个 NetworkOnMainThreadException "一个。

关于java - 尝试从 DCIM 获取图片时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27552555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com