2

私はcordovaでアンドロイドAPPを開発するために、毎日フォルダを作成し、そこにtxtファイルを保存したかったのです。すべて私がした後、条件の上Android 5.1.1以降のCordovaを搭載した外部ストレージパス(SDカード)

if(sDeviceVersion=='4.0' || sDeviceVersion=='4.0.4'){ 
    var sPath = 'file:///storage/extSdCard/'; 
}else if(sDeviceVersion=='4.1' || sDeviceVersion=='4.1.2' ||sDeviceVersion=='4.3.1'){ 
    var sPath = 'file:///storage/extSdCard/'; 
}else if(sDeviceVersion=='4.4' || sDeviceVersion=='4.4.4'){ 
    var sPath = 'file:///storage/extSdCard/'; 
}else if(sDeviceVersion=='5.0' || sDeviceVersion=='5.1.1'){ 
    var sPath = 'file:///mnt/sdcard/'; // 
}else if(sDeviceVersion=='6.0' || sDeviceVersion=='6.0.1'){ 
    var sPath = 'file:///storage/sdcard1/'; 
}else if(sDeviceVersion=='7.0' || sDeviceVersion=='7.1.2'){ 
    var sPath = 'file:///storage/sdcard1/'; 
} 

は4.4.4バージョンまで働いている、見て、私を助けてではなく、外部SDカードのそれぞれのAndroidの内部メモリのために働いてみました5.0 PATHが正しくありません。

私はsdcard0が内蔵され、sdcard1は外部ですが、そうでないことをどこでも読みを/ mnt/ストレージのパス

// sdcard0 works on all the androind for Internal Memory 
// 'file:///storage/sdcard1/'; suppose to work for external in higher version but 
// 'file:///mnt/sdcard/'; it works but in Internal memory ERROR 
// externalSdCard    -----> Not found with mnt and storage 
// SECONDARY_STORAGE 
// 'file:///storage/UsbDriveB/' -----------> didn't worked 
// external_sd is not worked with storage and mnt 

の下に、これらすべてを試してみましたもはや働いているようだ。誰でもパスで私を助けることができます。

でも、私は上記のすべてのみ内部ストレージのために働いている

alert(cordova.file.externalRootDirectory); // file:///storage/sdcard0/ Internal memory 
alert(cordova.file.externalApplicationStorageDirectory); // path to file:///android/data... 
alert(cordova.file.dataDirectory); // file:///data/androind/data/... 
alert(cordova.file.externalDataDirectory); // file://storage/sdcard0/android/data/... 

を試してみました。

外部ストレージへのSTORAGE/READ/WRITEのすべての許可が与えられています。

答えて

1

Android 5.0以降では、外部(リムーバブル)SDの場所は固定パスではなくなりました。代わりに、SDカードのシリアル番号がパスで使用されます。 たとえば、Android 7.1.1を実行している私のSamsung Galaxy S4では、物理的な外付けリムーバブルSDカードのパスは/storage/4975-1401/です。

さらに、外付けSDカードのルート(例:/storage/4975-1401/)はAndroidアプリでは読み取り専用になりました。つまり、アプリがSDカードに書き込む必要がある場合は、アプリケーションサンドボックスディレクトリ(例:/storage/4975-1401/Android/data/your.app.package.id/files)でアプリを実行する必要があります。

cordova-plugin-fileでは、外部(リムーバブル)SDカードにアクセスできません。たとえば、cordova.file.externalRootDirectoryfile:///storage/emulated/0/を返します。

ただし、例えば、外部(取り外し可能)SDカードへのファイルパスを取得するためにcordova-diagnostic-pluginの​​を使用することができます。

function getExternalSdLocation(done){ 
    cordova.plugins.diagnostic.getExternalSdCardDetails(function(details){ 
     details.forEach(function(detail){ 
      if(detail.type == "application"){ 
       cordova.file.externalSdCardApplicationDirectory = detail.filePath; 
      }else if(detail.type == "root"){ 
       cordova.file.externalSdCardRootDirectory = detail.filePath; 
      } 
     }); 
     done(); 
    }, function(error){ 
     console.error(error); 
     done(); 
    }); 
} 

getExternalSdLocation(function(){ 
    // use cordova.file.externalSdCardApplicationDirectory to write to SD card 
}); 
のAndroid 6.0の場合

以上、実行時の許可がために必要です外部SDカードにアクセスします。 requestRuntimePermission()cordova-diagnostic-pluginに入力すると、このアクセス権を要求できます。

function requestExternalSdPermission(done){ 
    cordova.plugins.diagnostic.requestRuntimePermission(function(status){ 
     switch(status){ 
      case cordova.plugins.diagnostic.permissionStatus.GRANTED: 
       console.log("Permission granted"); 
       getExternalSdLocation(done); 
       break; 
      case cordova.plugins.diagnostic.permissionStatus.DENIED: 
       console.log("Permission denied"); 
       askAgain(done); 
       break; 
      case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: 
       console.log("Permission permanently denied"); 
       reportError(done); 
       break; 
     } 
    }, function(error){ 
     console.error("The following error occurred: "+error); 
     reportError(done); 
    }, cordova.plugins.diagnostic.permission.WRITE_EXTERNAL_STORAGE); 
} 
  • アンドロイド5にこのコードを実行すると、以下のalwysユーザーからの許可を要求することなく、「付与された権限」になります。
  • AndroidManifest.xml<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />を含める必要があります - Android permissionsを参照してください。
関連する問題