現在Monacaで開発したアプリで外部SDカードにファイルを保存したいと考えています。
こちらのページを参考にしまして、以下のコードを用いることでSDカードのディレクトリパスを取得することができたのですが、このパスはSDカード内の内蔵ストレージを指しているようでして、ユーザーが自由に読み書きできる外部ストレージのパスではないようです。
外部ストレージのパスは「/storage/emulated/1」や「/storage/[UUID]」、「/mnt/sdcard/」といった感じのパスのようですが、このパスを取得することは可能でしょうか?
よろしくお願いいたします。
JavaScript
1function test (){ 2 window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, 3 function success1(directoryEntry) { 4 alert(directoryEntry.nativeURL); 5 // alert(JSON.stringify(directoryEntry)); 6 },); 7 8 // 出力結果=file:///storage/emulated/0/ 9 10} 11
追記
Googleで調べますとこちらの英語ページで同様の試みがされているみたいです。
下記コードで試してみたのですが、許可に関するメッセージは表示されず(Android 6以上対象で、Android 5の場合でも許可済みのメッセージが出るようなのですが出ませんでした)、コード最後に書いた「ここにSDに描き込む処理を書く」アラートが出るだけでした。何か問題箇所などお分かりの方はよろしくお願いいたします。
JavaScript
1function test (){ 2 3 4 requestExternalSdPermission(); 5 6 7 // アクセス許可を取る(Android 6以上、5の場合は許可メッセージが出る) 8 9 function requestExternalSdPermission(done){ 10 cordova.plugins.diagnostic.requestRuntimePermission(function(status){ 11 switch(status){ 12 case cordova.plugins.diagnostic.permissionStatus.GRANTED: 13 // 許可された場合 14 getExternalSdLocation(done); // SDカードのパスを取得する関数実行 15 break; 16 case cordova.plugins.diagnostic.permissionStatus.DENIED: 17 // 拒否された場合 18 console.log("Permission denied"); 19 askAgain(done); 20 break; 21 case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: 22 // 拒否された(恒久的)場合 23 console.log("Permission permanently denied"); 24 reportError(done); 25 break; 26 } 27 }, function(error){ 28 console.error("The following error occurred: "+error); 29 reportError(done); 30 }, cordova.plugins.diagnostic.permission.WRITE_EXTERNAL_STORAGE); 31 } 32 33 34 35 // SDカード 外部ストレージのパスを取得&書き込み 36 37 function getExternalSdLocation(done){ 38 cordova.plugins.diagnostic.getExternalSdCardDetails(function(details){ 39 details.forEach(function(detail){ 40 if(detail.type == "application"){ 41 cordova.file.externalSdCardApplicationDirectory = detail.filePath; 42 }else if(detail.type == "root"){ 43 cordova.file.externalSdCardRootDirectory = detail.filePath; 44 } 45 }); 46 done(); 47 }, function(error){ 48 console.error(error); 49 done(); 50 }); 51 } 52 53 getExternalSdLocation(function(){ 54 // cordova.file.externalSdCardApplicationDirectory を使用してSDカードに書き込む 55 alert('ここにSDに描き込む処理を書く'); 56 }); 57 58} 59
回答3件
あなたの回答
tips
プレビュー