[英]How can I ensure that my Android 6 Cordova app prompts the user to give permission before attempting to access the filesystem?
我正在將Cordova 3.4應用程序升級到Cordova 6.0,同時將部署平台(Nexus平板電腦)從Android 4.4升級到Android 6.作為其中的一部分,我已經從v0.2.5升級了文件系統插件cordova-plugin-file
到v4.1.1
首次運行時,應用程序在共享文件系統( file:///storage/emulated/0/
)上創建10個文件夾的目錄結構。 我已經在config.xml中添加了以下首選項,以確保在新版本的應用程序中使用相同的位置:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
我知道Android 6中有一個新的權限模型,用戶必須單獨允許應用程序請求的每個權限。
如果設備運行的是Android 6.0(API級別23)或更高版本,並且應用程序的targetSdkVersion為23或更高,則應用程序會在運行時請求用戶的權限。 Android開發者文檔
當安裝在已安裝早期版本(並且已卸載)且已創建目錄結構的平板電腦上時,我的應用程序的新版本在首次運行時按預期執行,提示用戶允許訪問文件系統的權限。
但是,當安裝在從未安裝過應用程序的平板電腦上時(或者當我刪除早期版本創建的目錄結構時),應用程序會因拋出FileError.PATH_EXISTS_ERR
錯誤而失敗。 它不會提示用戶允許按預期訪問文件系統的權限。
我已經檢查過,在構建應用程序時,生成的AndroidManifest.xml確實包含必要的權限屬性:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我目前的解決方法是停止應用,導航到設置>應用> MyApp>權限,並再次運行應用之前手動啟用“存儲”權限。 但我真的不希望我的用戶必須這樣做!
在實際嘗試訪問文件系統之前,如何確保應用程序確實提示用戶提供所需的權限?
以下是我的代碼的一些示例:
window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 4000 * 1024 * 1024, gotFileSystem, errorHandler);
function gotFileSystem(fileSystem) {
// store reference to file system
fs = fileSystem;
}
function createDir(directoryName) {
var directoryCreated = when.defer();
fs.root.getDirectory(directoryName, {
create: true
}, function (dirEntry) {
directoryCreated.resolve();
}, function(e) {
directoryCreated.reject(e);
}
);
return directoryCreated.promise;
}
升級到Android 6(MArshmallow)后面臨完全相同的問題。 Cordova文件插件(v 4.1.1)與Android Marshmallow存在權限問題。 此問題不允許在android文件系統中創建文件夾,從而導致路徑存在錯誤。
此問題現已解決。 您可能必須從cordova文件插件github中的android src文件夾中提取最新的FileUtils.java才能使其正常工作。 更新插件后,首次訪問文件系統時,應用程序會請求用戶訪問權限。 從那時起,后續請求工作正常。 檢查Apache問題跟蹤器中的CB-10798以獲取相關信息。 希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.