重启后无法获取 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()的值。