2015-09-25 9 views
5

コードワイドアンドロイドアプリで(デバイス、バージョン、プラグインリストの下にスクロールしてください)、私は優先的に保存したい外部SDカード上にファイルを作成し、SDCardが存在しない場合は内部ストレージを使用します。私は私の保存パスを設定しています:///storage/emulated/0/Android/data/com.fubar.app/files/、cordova.fileと同じ:コードバーとファイルプラグインでアンドロイドの外部sdcardを強制的に

persistentFS= cordova.file.externalDataDirectory||cordova.file.DataDirectory||fileSystem.root.toURL();

その最終的な値は、ファイルです.externalDataDirectory。

は私が設定している:index.htmlを セキュリティメタタグ内のAndroidManifest.xmlで config.xmlに <access origin="cdvfile://*" /> ... <preference name="AndroidPersistentFileLocation" value="Compatibility" /> <preference name="AndroidExtraFilesystems" value="files-external,sdcard,files,documents,cache,cache-external,root" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

と設定した各種エンチャント。私は、SDカードが挿入され、書き込みが可能であることを付け加えます。 は、ファイルマネージャーなどで書き込むことができることを確認します。 にはAndroid/data/com.fubar.myapp/files /フォルダが含まれています。

何もないもの:ファイルが内部デバイスストレージに書き込まれ、そこから読み込まれます。私はこのトピックで掃除されたすべてのgoogleを読んだが、何も私の仕事に近づかなかった(ファイルシステムルートのプラグインを使うことを提案する人もいますが、ファイルプラグインに組み込まれているようです)。

ヒント TIA、 ALF

編集:

`/storage/extSdCard/Android/data/com.fubar.myapp/files` 

にresolveLocalFileSystemURLを呼び出す: adbのシェルを使用して、私はアプリのために外部のSDカードファイルフォルダは、絶対パスを持っていることがわかりますfile:///storage/extSdCard/Android/data/com.fubar.myapp/files

がうまくいく。私はそれが道にあるとは思わない、その道は装置に依存するからだ。


デバイス:サムスンギャラクシータブ10.5、プラグインと、コルドバ5.3.1を使用して5.0.1をロリポップ: コルドバ・プラグインデバイス1.0.1「デバイス」 コルドバ・プラグインのダイアログ1.1.1「通知" cordova-plugin-file 3.0.0" File " cordova-plugin-file-transfer 1.3.0"ファイル転送 " cordova-plugin-media 1.0.1" Media " cordova-plugin-whitelist 1.1.0"ホワイトリスト "

ビルドホストはLinux FC21

答えて

2

YoあなたはContext.getExternalFilesDirs()に電話することができます。これは、あなたのアプリがデータを書き込むことができるディレクトリの配列を返します。そのうちの1つはsdcardパス/ storage/sdcardname/Android/data/appname/filesになります。

ほとんどの製造元は、SDカードのルートパスを公開するためにSECONDARY_STORAGE環境変数も設定しています。お試しいただけますSystem.getenv("SECONDARY_STORAGE")

Androidは、sdcardルートパスのパスを取得できるAPIを公開していません。リフレクションを使用して、StorageManagerからsdcardルートパスを取得することができます。java - > getVolumePaths() - http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/storage/StorageManager.java#590

+2

私はコードバ内で、javascriptで行うことはできますか?私が試してみたら、Contextは定義されていないので、あなたが話しているのはJava APIだと思います。 –

0

真のコルドバの答えはまだありませんので、ここで私がfile pluginを使って見つけたものがあります。私はまた、SDカードでの保存を検討していただけでなく、データは後で電子メールに添付され、Gmailは添付ファイルをSDからロードする必要があります。このブログは私に正しい方向に行くようになったhttps://www.neontribe.co.uk/cordova-file-plugin-examples/。ファイルの書き込みについて話セクションでは、基本的にはこの

window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (directoryEntry) { 

window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (directoryEntry) { 

を交換し、それが動作するはず。

+0

それは私のためには機能しません。私はまだ自分のデバイスGalaxy S7で内部ストレージ(エミュレート)のためのパスを取得します。 – JaSmin