簡體   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