2016-03-30 12 views
0

こんにちは、私のsqlite dbをダウンロードしてコードにコピーする必要があります。しかし、(sd.canWrite())が常にfalseを返す場合...私はこれに固執し、はい私のマニフェストに既に追加されています。仮想デバイスではなく、実際のデバイスでデバッグしています。 TyのヘルプアンドロイドでSDカードに書き込むと常にFalseを返す

private void copyDbToExternal(Context context) { 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     File data = Environment.getDataDirectory(); 

     if (sd.canWrite()){ 
      String currentDBPath = "//data//data//" + context.getApplicationContext().getPackageName() + "//databases//" 
        + "qamatrisdb"; 
      String backupDBPath = "qamatrisdb"; 
      File currentDB = new File(data, currentDBPath); 
      File backupDB = new File(sd, backupDBPath); 

      FileChannel src = new FileInputStream(currentDB).getChannel(); 
      FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
      dst.transferFrom(src, 0, src.size()); 
      src.close(); 
      dst.close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

答えて

1

Dev.Androidでチュートリアルを試しましたか?外部ストレージにアクセスするための

http://developer.android.com/training/basics/data-storage/files.html

例:名= "android.permission:私は、外部ストレージへの書き込みを持っている...と私はすでに<使用許可アンドロイドを持って

/* Checks if external storage is available for read and write */ 
public boolean isExternalStorageWritable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     return true; 
    } 
    return false; 
} 

/* Checks if external storage is available to at least read */ 
public boolean isExternalStorageReadable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state) || 
     Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     return true; 
    } 
    return false; 
} 
0

あなたのコードはSDカードとは関係ありません。あなたのコードはexternal storageであり、removable storageではありません。

canWrite()falseを返却された場合は、WRITE_EXTERNAL_STORAGE許可を欠落している可能性があり、またはあなたが23以上にtargetSdkVersionセットを持っていることとAndroid 6.0+ランタイム許可を処理していません。

また、既存のcurrentDBPathロジックをa call to getDatabasePath()に置き換えてください。

+0

いやのSRY。 WRITE_EXTERNAL_STORAGE "/>はまだfalseを書き込めます:( –

+0

@keikoman:おそらくあなたの' '要素が間違った場所にあるか、' targetSdkVersion'が23以上です:https://commonsware.com /blog/2015/08/31/hey-where-did-my-permission-go.html – CommonsWare

関連する問題