如何評價在Android11中,/Android/data文件夾無法讀寫??
<愛尬聊_百科大全>如何評價在Android11中,/Android/data文件夾無法讀寫?
憶清靜丫 10小時前 非常后悔更新了11,這可能是我見過最惡心的設計了,完全意義不明。能輕松管理所有文件一直是我覺得安卓比ios好的一點,我經常會把應用緩存的一些視屏圖片儲存起來,真的就好的不學學壞的。不過目前還沒有像ios那樣封鎖嚴密,連到電腦上還是可以管理的,以后真的不能無腦更新系統了,后悔。----------------------------------話說現在ES瀏覽器給了權限就可以繼續瀏覽data了,也算是有了個解決辦法了
陌清茗18185350591女 9小時前 https://developer.android.com/about/versions/11/privacy/storage?hl=zh-cn#file-access對數據安全有一定幫助,但是對于某些不遵守安卓規范的應用來說,恐怕是災難。舉個例子,QQ下載的文件現在在Android/data/com.tencent.mobileqq/Tencent/QQfile_recv下這意味著當我升級安卓11,我無法在正常的權限下獲得我通過QQ下載的東西,這會帶來極大的不方便。當然這只是我的推測,我自己并未使用Android11,如有錯誤請指出。<hr/>目前我已經用上Android11,目前通過自帶文件瀏覽器可以訪問Android/data目錄,root以后通過mt管理器可以讀寫該路徑。
z490656112 9小時前 是傘兵機制.喵的,手機里任何一個軟件,注意,是任何軟件你授權了,都可以挎著文件夾讀寫.但是,我這個用戶,即使我授權了,也沒法愉快的直接讀寫.反正意思就是,授權的第三方軟件比系統的管理器更加值得信任而且是無條件的那種.我可以輕松的把文件發送到百度云,任何云,就是沒法拷貝到本地.這個設計真的是傘兵.
路人丁的愛 9小時前 不知道是手機廠商會妥協,一通花里胡哨的操作給各個軟件公司大爹開放權限,還是軟件公司妥協,從此不再往data里亂拉屎。那天我要解壓一個QQ群里文件,之后包括官方文件管理器之內的應用程序都顯示無權限。在網上搜索一下后,我在三星的社區搜到一個解決辦法:升級安卓11(ONE UI3.0)之后無法訪問DATA文件夾解決辦法 - 蓋樂世社區 - 三星手機官方粉絲論壇神奇的是我安裝這個應用沒有給我要權限,有沒有大佬解答一下這是咋回事。
六合霸主 9小時前 開發者訪問安卓11 /android/data的方法為需要的開發者提供一種訪問安卓11的 /adnroid/data文件夾的方法清濁清濁最新版已經適配安卓11 并且可以免 ROOT 訪問 android/data 針對安卓11 希望分享出這種方法 也希望有些人不要再反編譯我的代碼并抄襲1.申請android/data的訪問權限使用intent 跳轉系統文件管理器到 android/data 并同意你的應用訪問這個文件夾這里是代碼 Uri uri1 = Uri.parse(&#34;content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata&#34;); Intent intent1 = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); intent1.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION); intent1.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri1); startActivityForResult(intent1, 11);這里的url 是我自己在舊安卓使用文件管理器選擇android/data返回的uri 同理 傳遞這個uri 給文件管理器 自然也會跳轉到這文件夾 如果不傳遞uri 系統文件管理器仍然無法顯示 android/data修改:這里的uri 在后續我發現在部分安卓11 無法正常跳轉了 以下是解決方法使用DocumentFile.fromTreeUri這個方法 獲得DocumentFile對象 然后再獲取他的uri 傳進去就行了 這樣就能正常跳轉uri 了如果授權完成 會是這樣后續的檢測是否授權android/data 就自行查看谷歌文檔吧2.使用uri 訪問 android/data 的文件如果你現在有一個文件的path 那么這樣做可以轉為可以訪問的uriString[] paths = path.replaceAll(&#34;/storage/emulated/0/Android/data&#34;, &#34;&#34;).split(&#34;/&#34;); StringBuilder stringBuilder = new StringBuilder(&#34;content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3AAndroid%2Fdata&#34;); for (String p : paths) { if (p.length() == 0) continue; stringBuilder.append(&#34;%2F&#34;).append(p); } return Uri.parse(stringBuilder.toString());這個uri 是android/data里的文件的uri 那么現在你可以使用DocumenFile 訪問這個文件具體的DocumentFile 用法可以谷歌下 3.使用ContentResolver 訪問文件如果你的對象是一個文件夾 并且你想要訪問這文件夾的文件 那么可以使用ContentResolver.query這個方法DocumentsContract.buildChildDocumentsUriUsingTree(dirUri, DocumentsContract.getDocumentId(dirUri));使用這個把uri 轉為 resolver 可處理的uri 然后使用 query查詢resolver.query(childrenUri, new String[]{DocumentsContract.Document.COLUMN_DOCUMENT_ID}, null, null, null);主要是為了獲取DocumentId 用于獲取子文件的uri這個方法是SQL 的方法 當然就可以使用SQL 的語句 可以自行谷歌這個文檔這里是獲取子文件的uri while (cursor.moveToNext()) { String documentId = cursor.getString(0); Uri uri = DocumentsContract.buildDocumentUriUsingTree(dirUri, documentId);}如果可以的話我建議 在此之前判斷 resolver.query 返回的 cursor 對象是否是null 這樣子我們就再次獲取了子文件的uri 了那么DocumentFile 就能再次派上了用場 DocumentFile documentFile1=DocumentFile.fromSingleUri(context,uri);DocumentFile 為我們提供了判斷是否是 文件夾 文件的方法如果是文件夾我們可以再次執行這樣得循環 如果是文件 我們可以獲取大小等由于清濁并不需要讀取文件內容和修改內容 所以這兩個怎么做 我并沒有做了 當然谷歌的文檔說了可以使用I/O 讀取 就跟普通的File 操作沒區別了到這 4.末這種方法并不是新方法 只是在安卓11 可以用罷了 早在之前讀取聯系人等 就是用的這種方法 安卓5.0開始就有了這種讀取方法 不過這種方法目前就我看來有一點問題 速度緩慢 容易出現問題 具體問題我已經遇到 在某種情況下會拋出各種exception 給你 當然就需要你catch 一下了 后續的問題再說吧 或許也有其他方法讀取 代碼并不是原創都是來自谷歌提供的文檔 具體的應用可以下載下清濁試試嗷 起飛
憶清靜丫 10小時前 非常后悔更新了11,這可能是我見過最惡心的設計了,完全意義不明。能輕松管理所有文件一直是我覺得安卓比ios好的一點,我經常會把應用緩存的一些視屏圖片儲存起來,真的就好的不學學壞的。不過目前還沒有像ios那樣封鎖嚴密,連到電腦上還是可以管理的,以后真的不能無腦更新系統了,后悔。----------------------------------話說現在ES瀏覽器給了權限就可以繼續瀏覽data了,也算是有了個解決辦法了
陌清茗18185350591女 9小時前 https://developer.android.com/about/versions/11/privacy/storage?hl=zh-cn#file-access對數據安全有一定幫助,但是對于某些不遵守安卓規范的應用來說,恐怕是災難。舉個例子,QQ下載的文件現在在Android/data/com.tencent.mobileqq/Tencent/QQfile_recv下這意味著當我升級安卓11,我無法在正常的權限下獲得我通過QQ下載的東西,這會帶來極大的不方便。當然這只是我的推測,我自己并未使用Android11,如有錯誤請指出。<hr/>目前我已經用上Android11,目前通過自帶文件瀏覽器可以訪問Android/data目錄,root以后通過mt管理器可以讀寫該路徑。
z490656112 9小時前 是傘兵機制.喵的,手機里任何一個軟件,注意,是任何軟件你授權了,都可以挎著文件夾讀寫.但是,我這個用戶,即使我授權了,也沒法愉快的直接讀寫.反正意思就是,授權的第三方軟件比系統的管理器更加值得信任而且是無條件的那種.我可以輕松的把文件發送到百度云,任何云,就是沒法拷貝到本地.這個設計真的是傘兵.
路人丁的愛 9小時前 不知道是手機廠商會妥協,一通花里胡哨的操作給各個軟件公司大爹開放權限,還是軟件公司妥協,從此不再往data里亂拉屎。那天我要解壓一個QQ群里文件,之后包括官方文件管理器之內的應用程序都顯示無權限。在網上搜索一下后,我在三星的社區搜到一個解決辦法:升級安卓11(ONE UI3.0)之后無法訪問DATA文件夾解決辦法 - 蓋樂世社區 - 三星手機官方粉絲論壇神奇的是我安裝這個應用沒有給我要權限,有沒有大佬解答一下這是咋回事。
六合霸主 9小時前 開發者訪問安卓11 /android/data的方法為需要的開發者提供一種訪問安卓11的 /adnroid/data文件夾的方法清濁清濁最新版已經適配安卓11 并且可以免 ROOT 訪問 android/data 針對安卓11 希望分享出這種方法 也希望有些人不要再反編譯我的代碼并抄襲1.申請android/data的訪問權限使用intent 跳轉系統文件管理器到 android/data 并同意你的應用訪問這個文件夾這里是代碼 Uri uri1 = Uri.parse(&#34;content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata&#34;); Intent intent1 = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); intent1.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION); intent1.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri1); startActivityForResult(intent1, 11);這里的url 是我自己在舊安卓使用文件管理器選擇android/data返回的uri 同理 傳遞這個uri 給文件管理器 自然也會跳轉到這文件夾 如果不傳遞uri 系統文件管理器仍然無法顯示 android/data修改:這里的uri 在后續我發現在部分安卓11 無法正常跳轉了 以下是解決方法使用DocumentFile.fromTreeUri這個方法 獲得DocumentFile對象 然后再獲取他的uri 傳進去就行了 這樣就能正常跳轉uri 了如果授權完成 會是這樣后續的檢測是否授權android/data 就自行查看谷歌文檔吧2.使用uri 訪問 android/data 的文件如果你現在有一個文件的path 那么這樣做可以轉為可以訪問的uriString[] paths = path.replaceAll(&#34;/storage/emulated/0/Android/data&#34;, &#34;&#34;).split(&#34;/&#34;); StringBuilder stringBuilder = new StringBuilder(&#34;content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3AAndroid%2Fdata&#34;); for (String p : paths) { if (p.length() == 0) continue; stringBuilder.append(&#34;%2F&#34;).append(p); } return Uri.parse(stringBuilder.toString());這個uri 是android/data里的文件的uri 那么現在你可以使用DocumenFile 訪問這個文件具體的DocumentFile 用法可以谷歌下 3.使用ContentResolver 訪問文件如果你的對象是一個文件夾 并且你想要訪問這文件夾的文件 那么可以使用ContentResolver.query這個方法DocumentsContract.buildChildDocumentsUriUsingTree(dirUri, DocumentsContract.getDocumentId(dirUri));使用這個把uri 轉為 resolver 可處理的uri 然后使用 query查詢resolver.query(childrenUri, new String[]{DocumentsContract.Document.COLUMN_DOCUMENT_ID}, null, null, null);主要是為了獲取DocumentId 用于獲取子文件的uri這個方法是SQL 的方法 當然就可以使用SQL 的語句 可以自行谷歌這個文檔這里是獲取子文件的uri while (cursor.moveToNext()) { String documentId = cursor.getString(0); Uri uri = DocumentsContract.buildDocumentUriUsingTree(dirUri, documentId);}如果可以的話我建議 在此之前判斷 resolver.query 返回的 cursor 對象是否是null 這樣子我們就再次獲取了子文件的uri 了那么DocumentFile 就能再次派上了用場 DocumentFile documentFile1=DocumentFile.fromSingleUri(context,uri);DocumentFile 為我們提供了判斷是否是 文件夾 文件的方法如果是文件夾我們可以再次執行這樣得循環 如果是文件 我們可以獲取大小等由于清濁并不需要讀取文件內容和修改內容 所以這兩個怎么做 我并沒有做了 當然谷歌的文檔說了可以使用I/O 讀取 就跟普通的File 操作沒區別了到這 4.末這種方法并不是新方法 只是在安卓11 可以用罷了 早在之前讀取聯系人等 就是用的這種方法 安卓5.0開始就有了這種讀取方法 不過這種方法目前就我看來有一點問題 速度緩慢 容易出現問題 具體問題我已經遇到 在某種情況下會拋出各種exception 給你 當然就需要你catch 一下了 后續的問題再說吧 或許也有其他方法讀取 代碼并不是原創都是來自谷歌提供的文檔 具體的應用可以下載下清濁試試嗷 起飛