繁体   English   中英

是否可以使用 MediaStore.VOLUME_EXTERNAL 获取 WhatsApp 媒体文件

[英]Is it possible to get WhatsApp media file using MediaStore.VOLUME_EXTERNAL

我的应用程序需要备份 WhatsApp 状态、语音笔记和图像的功能。 如您所知,在 Android Q 谷歌强制使用 MediaStore API 访问外部媒体文件之后。

WhatsApp 还将他们的文件移动到/Android/media/com.whatsapp/WhatsApp 我尝试使用MANAGE_EXTERNAL_STORAGE权限它工作正常,但备份这些文件不是应用程序的核心功能,所以我认为谷歌不会让我使用这个权限。

我想知道是否有任何方法可以使用 MediaStore.VOLUME_EXTERNAL 读取这些文件?

我试过这样的事情。 我不确定这是否可能。

val collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)

val selection= (MediaStore.Files.FileColumns.MEDIA_TYPE + "="
        + MediaStore.Files.FileColumns.MEDIA_TYPE_NONE)
val selectionArgs= arrayOf("%/WhatsApp/Media/.Statuses%")
val cursor = applicationContext.contentResolver.query(
    collection, null, selection, selectionArgs, null)
debug(cursor?.columnCount)
cursor?.close()

它抛出一个异常。

Caused by: android.database.sqlite.SQLiteException: no such column: media_type

试试这个...

要阅读 whatsapp 状态,您不需要做更多的事情,只需更改其路径即可。

您也不需要使用 MANAGE_EXTERNAL_STORAGE 权限。 这也可以使用较旧的权限。

我这样做了

String path=Environment.getExternalStorageDirectory().getAbsolutePath()+"/Android/media/"+"com.whatsapp" + "/WhatsApp/Media/.Statuses/"

File directory = new File(wa_path);
    if (!directory.exists()) {
        directory.mkdirs();
    }
    File[] files = directory.listFiles();
    if (files != null) {
        Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
        for (int i = 0; i < files.length; i++) {
            if (!files[i].getName().equals(".nomedia")) {
                your_list.add(files[i]);
            }
        }
    }

这也适用于 android 11。 我只像以前一样要求“READ_EXTERNAL_STORAGE”和“WRITE_EXTERNAL_STORAGE”。

所以现在你需要检查“WhatsApp”文件夹是否在根存储中可用(在它之前),如果不可用则需要检查我上面提到的路径。

如果您不理解或不起作用,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM