Android 捕获图像,然后将其保存到“多媒体资料”中有时不工作

Android 捕获图像,然后将其保存到“多媒体资料”中有时不工作,android,camera,save,gallery,android-mediascanner,Android,Camera,Save,Gallery,Android Mediascanner,我有一种启动相机并拍照的方法(使用API 24及更高版本的软件): 创建图像文件: private File createImageFile() { File picturesDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); String imgName = "myImageName_0X0Y02_test.jpg"; return

我有一种启动相机并拍照的方法(使用API 24及更高版本的软件):

创建图像文件:

private File createImageFile() {

    File picturesDirectory  = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

    String imgName = "myImageName_0X0Y02_test.jpg";

    return  new File(picturesDirectory.getPath(),"picture" + imgName );

}
  • 问题是
这段代码运行正常,但有时我在图库中看不到图像,有时我在大约10分钟后打开图库时在那里看到图像!这很奇怪,我很困惑,我是不是遗漏了什么

  • 授予所有权限(摄像头和对存储的完全访问)
    • 你是这个问题的头号人物。你应该告诉媒体商店你的新文件

      为此,请调用文件的媒体扫描程序


      代码已经发布了####次。因此,谷歌。

      因为您使用的是API 24及更高版本,所以我只提供它的代码。基本上,您需要告诉媒体扫描程序已添加文件,以便它可以立即扫描并添加:

      public static void scanMediaForChanges(Context context, File file){
          MediaScannerConnection.scanFile(context,
                  new String[]{file.toString()}, null,
                  new MediaScannerConnection.OnScanCompletedListener() {
                      public void onScanCompleted(String path, Uri uri) {
                          Log.i("ExternalStorage", "Scanned " + path + ":");
                          Log.i("ExternalStorage", "-> uri=" + uri);
                      }
                  });
      }
      

      这不是一个答案,你不应该把它贴在评论上,真是胡说八道。我告诉了问题的原因和解决方法。给你留了点事做。一个真实的答案。告诉我搜索不是答案,而是评论。如果你认为这是重复,那么用回答的问题适当地标记它。在我看来,在你的答案中猛烈抨击OP并不会给社区带来任何价值。最好的答案是,我应该在onActivityResult上调用这个方法吗?@LovingAndroid很高兴我能帮上忙:)是的,我个人在检查结果是否正常后立即调用它{当我在API 23和更低版本上使用此方法时,我应该担心吗?我现在还没有看到错误:)@LovingAndroid我认为在API低于19的情况下,您应该发送一个广播,类似于
      sendBroadcast(新的Intent(Intent.ACTION\u MEDIA\u MOUNTED,Uri.fromFile(Environment.getExternalStorageDirectory()));
      虽然我不确定第二个参数,但它应该有效。谢谢,但是第一个方法很有效:)但是我会记下这个注释
      public static void scanMediaForChanges(Context context, File file){
          MediaScannerConnection.scanFile(context,
                  new String[]{file.toString()}, null,
                  new MediaScannerConnection.OnScanCompletedListener() {
                      public void onScanCompleted(String path, Uri uri) {
                          Log.i("ExternalStorage", "Scanned " + path + ":");
                          Log.i("ExternalStorage", "-> uri=" + uri);
                      }
                  });
      }