私のCordovaアプリでファイルの読み取り権限の問題が発生していますが、私の人生は正しく追跡できません。 Android 5とAndroid 6の間では、同じ呼び出しで全く異なる結果が表示されています(fileEntry
)。 Androidでファイル/ディレクトリを読み取るために必要な変更があるかどうかを知っていますか> 5?ファイルの検索結果がAndroid 6に返されません
Goryの詳細:私は(cordova create hello
を呼び出す)だけcordova-plugin-file
でのHelloWorldアプリに出たコードをコピーして、同じ結果を取得しています。次のように私の変更点は次のとおりです。
私はindex.html
の身体への単一の要素を追加しました:私もちょうどデバイスとリターンのさまざまなディレクトリを反復処理するために、index.js
に株式receivedEvent方法を変更し
<div id="contents"></div>
を何cordova-plugin-file
は私に与える:
receivedEvent: function (id) {
"use strict";
var parentElement = document.getElementById(id),
listeningElement = parentElement.querySelector('.listening'),
receivedElement = parentElement.querySelector('.received'),
localURLs = [
cordova.file.documentsDirectory,
cordova.file.externalRootDirectory,
cordova.file.sharedDirectory,
cordova.file.syncedDataDirectory
],
DirsRemaining = localURLs.length,
i,
contents = "",
addFileEntry = function (entry) {
var dirReader = entry.createReader();
dirReader.readEntries(
function (entries) {
var i;
for (i = 0; i < entries.length; i += 1) {
if (entries[i].isDirectory === true) {
contents += "<h2> Directory: " + entries[i].fullPath + "</h2>";
// Recursive -- call back into this subdirectory
DirsRemaining += 1;
addFileEntry(entries[i]);
} else {
contents += "<p> File: " + entries[i].fullPath + "</p>";
}
}
DirsRemaining -= 1;
if (DirsRemaining <= 0) {
if (contents.length > 0) {
document.getElementById("contents").innerHTML = contents;
} else {
// nothing to select -- inform the user
document.getElementById("contents").innerHTML = "No documents found";
}
}
},
function (error) {
console.log("readEntries error: " + error.code);
contents += "<p>readEntries error: " + error.code + "</p>";
}
);
},
addError = function (error) {
// log the error and continue processing
console.log("getDirectory error: " + error.code);
DirsRemaining -= 1;
};
for (i = 0; i < localURLs.length; i += 1) {
if (localURLs[i] === null || localURLs[i].length === 0) {
DirsRemaining -= 1;
continue; // skip blank/non-existent paths for this platform
}
window.resolveLocalFileSystemURL(localURLs[i], addFileEntry, addError);
}
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
}
可能なセキュリティ設定を:
私のplatforms/android/AndroidManifest.xml
ファイルは、適切な権限が含まれています
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
は、ここで(それだけで株式一つだ)index.htmlの中で私のCSPです:ここで
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
結果は以下のとおりです。
のアンドロイド5.注ディレクトリおよびIが表示されなければならないcordova.file.externalRootDirectory
下のサブディレクトリにファイルをいくつか持っているファイル(他の人が画面外です)
アンドロイド6.注意。サブディレクトリ自体も表示する必要があります。ヒントの@greenappsへ
を、あなた以上が要求された許可を確認するために、あなたのアプリのユーザーに確認するためのコードを追加する必要があります。 Googleの実行時アクセス許可。 – greenapps