私は
オープンに失敗しました:
EACCES (Permission denied)
ライン上でOutputStream myOutput = new FileOutputStream(outFileName);
ルートを確認して、試してみましたandroid.permission.WRITE_EXTERNAL_STORAGE
。
この問題を解決するにはどうすればいいでしょうか?
try {
InputStream myInput;
myInput = getAssets().open("XXX.db");
// Path to the just created empty db
String outFileName = "/data/data/XX/databases/"
+ "XXX.db";
// Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// Transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
buffer = null;
outFileName = null;
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ベストアンサー1
Google はAndroid Qに、外部ストレージのフィルター表示という新機能を追加しました。これを簡単に修正するには、AndroidManifest.xml ファイルに次のコードを追加します。
<manifest ... >
<!-- This attribute is "false" by default on apps targeting Android Q. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
詳細については、こちらをご覧ください:https://developer.android.com/training/data-storage/use-cases
編集:この回答は Android 11 では古くなっているため、反対票が集まり始めています。この回答を見た人は、上記のリンクにアクセスして手順を読んでください。