android - 使图像文件在 Lollipop 的 Android Gallery 中可见

标签 android android-5.0-lollipop android-gallery android-file android-mediascanner

我正在尝试使在应用程序中拍摄的一些照片在图库中可见(这样它们就可以在应用程序外部共享和查看),但我想将图像本身保存在应用程序的数据目录中所以当应用程序被删除时,它们会被删除(所以它们存储在“{sdcard}/Android/data/{appID}/Pictures/{subfolder}/”)。

我看了很多答案,对于旧版本的 Android,以下两种解决方案都有效,但它们似乎不适用于 Lollipop:

MediaScannerConnection.scanFile(this,
    new String[]{file.toString()}, new String[] { "image/jpeg" },
    new MediaScannerConnection.OnScanCompletedListener() {
        public void onScanCompleted(String path, Uri uri) {
            Log.i("ExternalStorage", "Scanned " + path + ":");
            Log.i("ExternalStorage", "-> uri=" + uri);
        }
    });

Uri contentUri = Uri.fromFile(file);
Intent mediaScanIntent = new 
    Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,contentUri);
sendBroadcast(mediaScanIntent);

我已经在 Nexus 4 (Android 5.0.1) 和 Nexus 6 (Android 5.1) 上测试过它,但它不起作用。在 Nexus 7 (Android 4.2.2) 中它确实有效。所有 3 台设备在 {sdcard}/Android/data/ 文件夹中都有一个“.onmedia”文件,因此正常的媒体扫描应该不会拾取它们...

有没有人知道如何解决此问题以使其在所有设备/Android 版本上运行?这应该是因为 noMedia 文件首先不起作用,而 Lollipop 是唯一正确执行此操作的版本吗?

编辑:请注意,即使重启手机(这也应该触发文件重新扫描)也不起作用。并且有充分的理由,因为文件位于“.nomedia”目录的子文件夹中......所以我认为任何包含 MEDIA_MOUNTED 广播的解决方案都是无用的。

最佳答案

试试下面的代码。它在 Lollipop 中对我有用,希望对你也有用

ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA,"file path");
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg");
mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);

编辑:不要忘记将它添加到您的 list 中(尽管在 Lollipop 中不再需要它):

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

关于android - 使图像文件在 Lollipop 的 Android Gallery 中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29823740/

相关文章:

css - Cordova 应用程序 - Android 5 Lollipop 上的滚动问题

Android 开源 Activity 让用户选择/创建媒体?

android - 如何将图像旋转到从 Android 中的图库中选择的默认方向?

android - 如何在 Android Studio 中将 1200 格式化为 1.2k

android - 为什么partial invalidate会跨越整个View?

android - 文件上传字段在 Android 的 Web View 中不起作用

android - 将 gif 保存到 android 画廊

android - 如何为 AutoCompleteTextView 创建我自己的下拉 View ?

android - 库项目的依赖项未内置到 APK 中

android - 安全回放 : Crash observed in MediaCodec