【问题标题】:Android gallery not updated after ACTION_IMAGE_CAPTURE在 ACTION_IMAGE_CAPTURE 之后未更新 Android 图库
【发布时间】:2025-11-26 20:35:01
【问题描述】:

我正在使用MediaStore.ACTION_IMAGE_CAPTURE 拍照,MediaStore.EXTRA_OUTPUT 指向存储所有其他照片/视频文件的 DCIM/Camera 目录的Uri

照片文件已成功拍摄,我可以使用 ES 文件资源管理器查看它,并且可以在我的应用程序中查看它。但是当我使用Intent.ACTION_PICK时它没有显示在画廊中

Intent selectPictureIntent = new Intent(Intent.ACTION_PICK);
        selectPictureIntent.setType("image/*");

我已经阅读了有关在图片返回后使用更新图库的其他主题

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
                 Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

还有

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, _outputMediaUri);     
        LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);

这里发生了什么:(

【问题讨论】:

    标签: java android android-intent photo mediastore


    【解决方案1】:

    您为什么使用 LocalBroadcastManager? LocalBroadcastManager 只能在您的应用程序内部发送广播数据。尝试使用

    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, _outputMediaUri);     
    sendBroadcast(intent);
    

    Gallery 始终监听 URI 变化。文件事件广播到 Gallery 后,Gallery 中存储的数据将被更新。

    【讨论】:

    • 是的,这就是问题所在。这段代码在一个片段中,所以它最终成为getActivity().sendBroadcast(intent)。谢谢。
    • 请看这个问题*.com/questions/31096845/…
    【解决方案2】:

    它也可能与 KITKAT 构建版本有关.. 确保您可以使用此代码:

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                        Intent mediaScanIntent = new Intent(
                                Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                        Uri contentUri = Uri.fromFile(out); \\out is your output file
                        mediaScanIntent.setData(contentUri);
                        this.sendBroadcast(mediaScanIntent);
                    } else {
                        sendBroadcast(new Intent(
                                Intent.ACTION_MEDIA_MOUNTED,
                                Uri.parse("file://"
                                        + Environment.getExternalStorageDirectory())));
                    }
    

    【讨论】:

      最近更新 更多