Мне нужно разработать функциональность для восстановления базы данных с помощью файла резервной копии, чтобы пользователь мог восстановить данные после переустановки приложения.
Я занимаюсь разработкой приложения Android с использованием Flutter и устройства SQLite. собственная база данных с lib moor_flutter. Я разработал для пользователя функцию резервного копирования базы данных, а другую - для восстановления базы данных из этого файла резервной копии.
Проблема заключается в том, что функция восстановления не работает на некоторых устройствах.
it не работал: Motorola one zoom / с android 9, redminote 7 / с android 9, redminote 8 / с android 9.
, на котором он работал: Samsung Galaxy S9 / с Android 9, Moto G4, Redmi 4x / с Android 7.1.
Следуя обеим используемым функциям, для создания или резервного копирования и восстановления.
Future<void> backup() async {
final dbFolder = await getDatabasesPath();
final dbLocation = p.join(dbFolder, 'dbnew.sqlite');
final File file = File(dbLocation);
await ShareExtend.share(file.path, "file");
}
Future<void> restore() async {
final dbFolder = await getDatabasesPath();
final dbLocation = p.join(dbFolder, 'dbnew.sqlite');
AppDatabase.instance.close();
//acess file backup
File file = await FilePicker.getFile(type: FileType.ANY);
Uint8List updatedContent = await File(file.path).readAsBytes();
File(dbLocation).writeAsBytes(updatedContent);
}
Разрешения в AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>