簡體   English   中英

在嘗試訪問文件系統之前,如何確保我的Android 6 Cordova應用程序提示用戶授予權限?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM