如何获取android中我的图库中的图像的MediaStore.Images.ImageColumns.TITLE?

时间:2017-02-24 16:50:32

标签: java android

我在这里有一张图片:/storage/emulated/0/Pictures/1487951012463.jpg 标题显然是一个文字。此标题显示在android 5.1.1的默认库查看器中。 (选择图像 - >详细信息)

但是从我的应用程序中,我无法阅读它。

有人可以帮帮我吗? 我正在使用的代码是:

public static void loadTitle(Context context) {

Uri contentUri = Uri.parse("/storage/emulated/0/Pictures/1487951012463.jpg");

String[] projection = new String[] {
        MediaStore.Images.ImageColumns._ID,
        MediaStore.Images.ImageColumns.DISPLAY_NAME,
        MediaStore.Images.ImageColumns.DATE_TAKEN,
        MediaStore.Images.ImageColumns.LATITUDE,
        MediaStore.Images.ImageColumns.LONGITUDE,
        MediaStore.Images.ImageColumns.DESCRIPTION,
        MediaStore.Images.ImageColumns.SIZE,
};
Cursor cursor = context.getContentResolver().query(contentUri, projection, null, null, null);
cursor.moveToFirst();
String title, name;
title = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.TITLE));
name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME));

Log.e("Title", title);
Log.e("Display_Name", name);

}

当光标不包含任何内容时,应用程序崩溃。

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference

如果这很重要,我会从活动中调用它...

我做错了什么?

EDIT - EDIT - EDIT - EDIT - EDIT - EDIT - EDIT

我试图像建议的那样使用ExifInterface。我得到的结果是'null'。

ExifInterface exif = new ExifInterface("/storage/emulated/0/Pictures/1487955364408.jpg");

        String x = exif.getAttribute("XPTitle");

        Log.e("Title with Exif: ", "X = "+ x );

请帮忙。

1 个答案:

答案 0 :(得分:0)

首先,/storage/emulated/0/Pictures/1487951012463.jpg不是Uri。这是一条路。 Uri有一个方案。

其次,即使您将file方案放在Uri上(这会使Uri生效),也不能将Uriquery()一起使用在ContentResolver上。 query()仅适用于content Uri,而您没有{。}}。

据推测,该标题位于JPEG文件的EXIF标题中,但我不确定哪个EXIF标记是正确的。如果您能找到它,可以使用支持库的ExifInterface来读取值。