![](/img/trans.png)
[英]Is it possible to filter or remove results shown when using PICK_ACTION and MediaStore.Audio.Media.EXTERNAL_CONTENT_URI?
[英]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.