Одним из требований нашего приложения является сохранение и резервное копирование некоторого файла SQLite, даже если приложение удалено.
Мы достигаем этого, записывая файл SQLite через Room в местоположение Environment.getExternalStorageDirectory
RoomDatabase с настраиваемым путем к файлу SQLite
@Database(
entities = {Backup.class},
version = 1
)
public abstract class LocalBackupNamedRoomDatabase extends RoomDatabase {
public abstract BackupDao backupDao();
public static LocalBackupNamedRoomDatabase newInstance(String dbName) {
LocalBackupNamedRoomDatabase INSTANCE = Room.databaseBuilder(
WeNoteApplication.instance(),
LocalBackupNamedRoomDatabase.class,
dbName
)
.build();
return INSTANCE;
}
}
Функция возвращает Environment.getExternalStorageDirectory
public static String getBackupDirectory() {
if (backupDirectory == null) {
File _externalStorageDirectory = Environment.getExternalStorageDirectory();
if (_externalStorageDirectory == null) {
return null;
}
try {
backupDirectory = _externalStorageDirectory.getCanonicalPath();
} catch (IOException e) {
Log.e(TAG, "", e);
}
if (backupDirectory == null) {
return null;
}
backupDirectory = toEndWithFileSeperator(backupDirectory) + "com.yocto.wenote" + File.separator + "backup" + File.separator;
}
return backupDirectory;
}
Как сохранить файл SQLite через Room во внешнем хранилище
LocalBackupNamedRoomDatabase.newInstance(
getBackupDirectory() + "local-backup"
).backupDao().insert(backup)
Согласно этому , я понимаю, что Environment.getExternalStorageDirectory
может больше не использоваться (я прав?).
Я предполагаю, что для достижения того же поведения мне может понадобиться MediaStore.Downloads
? Но как?
Может ли кто-нибудь привести конкретный пример для приведенного выше варианта использования? Или мы больше не можем добиться такого поведения в хранилище Scoped?