重启后无法获取 MediaStore.Images.Media
Can't get MediaStore.Images.Media after reboot
我开发了一个应用程序,将照片保存在应用程序文件夹 (/android/data/[应用程序文件夹]/files/Report/[目录]) 中,并将一些数据保存到 DESCRIPTION 字段中,这是我的代码保存图像:
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, directory);
image.put(Images.Media.DISPLAY_NAME, FOTOC_PREFIX_NAME + "_" + directory + "_" + data + ".jpg");
image.put(Images.Media.DESCRIPTION, "EXAMPLE DESC");
image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
image.put(Images.Media.MIME_TYPE, "image/jpg");
image.put(Images.Media.ORIENTATION, 0);
File parent = imagePath.getParentFile();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
image.put(MediaStore.Images.ImageColumns.RELATIVE_PATH, parent.getAbsolutePath());
}
image.put(Images.ImageColumns.BUCKET_ID, parent.toString().toLowerCase().hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName().toLowerCase());
image.put(Images.Media.SIZE, imagePath.length());
image.put(Images.Media.DATA, imagePath.getAbsolutePath());
Uri result = getContentResolver().insert(MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY), image);
然后我读取数据:
String whereCause = MediaStore.Images.Media.DISPLAY_NAME + " LIKE '%" + UsefullThings.getNameWithoutExtension(photofile.getName()) + "%'";
String[] projection = new String[] {MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media.DESCRIPTION,MediaStore.Images.Media.TITLE,MediaStore.Images.Media._ID};
Cursor cursor = getContentResolver().query(MediaStore.Images.Media
.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY), projection, whereCause, null, MediaStore.Images.Media._ID);
if (cursor.getCount() == 1) {
cursor.moveToFirst();
}
String descstring = "";
try {
descstring =cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DESCRIPTION));
}catch(Exception e){
....
}
其中 photofile 是图片。
一切正常,但如果我重新启动我的平板电脑,那么相同的查询 returns 空光标。
谁能帮帮我?
谢谢
app which saves photos inside the app folder (/android/data/[app-folder]/files/Report/[directory])
你是说 /storage/emulated/0/Android/data/[app-folder]/files/Report/[目录] ?
如果您使用 MediaStore,那是不可能开始的。
这是一个特定于应用程序的目录,MediaStore 不会为您提供该位置的 insert() uri。
image.put(MediaStore.Images.ImageColumns.RELATIVE_PATH, parent.getAbsolutePath());
你应该在.RELATIVE_PATH中放置一个相对路径。不像你现在做的那样是一个完整的绝对路径。我们也看不到你放在那里的到底是什么。请说出parent.getAbsolutePath()的值。
我开发了一个应用程序,将照片保存在应用程序文件夹 (/android/data/[应用程序文件夹]/files/Report/[目录]) 中,并将一些数据保存到 DESCRIPTION 字段中,这是我的代码保存图像:
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, directory);
image.put(Images.Media.DISPLAY_NAME, FOTOC_PREFIX_NAME + "_" + directory + "_" + data + ".jpg");
image.put(Images.Media.DESCRIPTION, "EXAMPLE DESC");
image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
image.put(Images.Media.MIME_TYPE, "image/jpg");
image.put(Images.Media.ORIENTATION, 0);
File parent = imagePath.getParentFile();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
image.put(MediaStore.Images.ImageColumns.RELATIVE_PATH, parent.getAbsolutePath());
}
image.put(Images.ImageColumns.BUCKET_ID, parent.toString().toLowerCase().hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName().toLowerCase());
image.put(Images.Media.SIZE, imagePath.length());
image.put(Images.Media.DATA, imagePath.getAbsolutePath());
Uri result = getContentResolver().insert(MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY), image);
然后我读取数据:
String whereCause = MediaStore.Images.Media.DISPLAY_NAME + " LIKE '%" + UsefullThings.getNameWithoutExtension(photofile.getName()) + "%'";
String[] projection = new String[] {MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media.DESCRIPTION,MediaStore.Images.Media.TITLE,MediaStore.Images.Media._ID};
Cursor cursor = getContentResolver().query(MediaStore.Images.Media
.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY), projection, whereCause, null, MediaStore.Images.Media._ID);
if (cursor.getCount() == 1) {
cursor.moveToFirst();
}
String descstring = "";
try {
descstring =cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DESCRIPTION));
}catch(Exception e){
....
}
其中 photofile 是图片。 一切正常,但如果我重新启动我的平板电脑,那么相同的查询 returns 空光标。
谁能帮帮我? 谢谢
app which saves photos inside the app folder (/android/data/[app-folder]/files/Report/[directory])
你是说 /storage/emulated/0/Android/data/[app-folder]/files/Report/[目录] ?
如果您使用 MediaStore,那是不可能开始的。
这是一个特定于应用程序的目录,MediaStore 不会为您提供该位置的 insert() uri。
image.put(MediaStore.Images.ImageColumns.RELATIVE_PATH, parent.getAbsolutePath());
你应该在.RELATIVE_PATH中放置一个相对路径。不像你现在做的那样是一个完整的绝对路径。我们也看不到你放在那里的到底是什么。请说出parent.getAbsolutePath()的值。