前提・実現したいこと
AndroidアプリでSQLiteを利用しています。
DBファイル自体をエクスポート、インポートすることでバックアップする機能を持たせており、ソースコードの方法で実現しています。
これまではこの方法で問題なく処理できていたのですが、Android 9 でimportDBが機能しなくなりました。
dst.transferFrom(src, 0, src.size());
までは問題なく動いていることは確認しており、この行でもエラーが生じるわけではないのですが、ファイルの置き換えはなされずに終了してしまいます。
同じソースコードで今でもAndroid 8 以下では問題なく機能しています。
何が原因と考えられますでしょうか?
ご意見を頂戴できますと幸いです。
Android Studio 3.2.1
targetSdkVersion 28
minSdkVersion 14
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
Java
1public class BackupAndRestore { 2 public static void importDB(Context context) { 3 try { 4 File sd = Environment.getExternalStorageDirectory(); 5 if (sd.canWrite()) { 6 File backupDB = context.getDatabasePath(DBHandler.getDBName()); 7 String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); 8 File currentDB = new File(sd, backupDBPath); 9 10 FileChannel src = new FileInputStream(currentDB).getChannel(); 11 FileChannel dst = new FileOutputStream(backupDB).getChannel(); 12 dst.transferFrom(src, 0, src.size()); 13 src.close(); 14 dst.close(); 15 16 MyApplication.toastSomething(context, "Import Successful!"); 17 } 18 } catch (Exception e) { 19 e.printStackTrace(); 20 } 21 } 22 23 public static void exportDB(Context context) { 24 try { 25 File sd = Environment.getExternalStorageDirectory(); 26 File data = Environment.getDataDirectory(); 27 28 if (sd.canWrite()) { 29 String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); 30 File currentDB = context.getDatabasePath(DBHandler.getDBName()); 31 File backupDB = new File(sd, backupDBPath); 32 33 FileChannel src = new FileInputStream(currentDB).getChannel(); 34 FileChannel dst = new FileOutputStream(backupDB).getChannel(); 35 dst.transferFrom(src, 0, src.size()); 36 src.close(); 37 dst.close(); 38 39 MyApplication.toastSomething(context, "Backup Successful!"); 40 } 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 } 45}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してくださいとして3.
あなたの回答
tips
プレビュー