在 Android 平板电脑内存中保存 SQLite 数据库 (API 23)
Saving a SQLite database in Android tablet internal memory (API 23)
我是 Android 应用程序开发的新手。然而,我目前的项目要求我制作一个应用程序来记录实地观察(我是一名研究科学家),将它们保存到 SQLite 数据库中——这些将被发送到一个中央位置进行处理。该应用将在平板电脑上使用。
目前,我正在使用 Android Studio,当我模拟应用程序功能时,一切都按计划进行并使用 DB Browser for SQLite,我可以看到值被正确记录在数据库中.
正在研究(一个例子是答案here),我知道数据库(.db
)文件保存在目录路径中:
/data/data/<your.app.package>/databases/foo.db
当然,这可以在 Android Studio 中访问,但我的理解是,除非设备已获得 root 权限,否则这些文件无法在实际设备中访问。由于种种原因,这不是我所从事的工作的选择。
在研究中发现了一种备份数据库的方法,并将备份的数据库保存到SD卡中,如Backup/restore sqlite db in android [duplicate] and the duplicate target Android backup/restore: how to backup an internal database?.
问题的答案
在 23 及更高版本的 API 中保存到 SD 卡等外部存储设备现在需要相当多的权限才能写入外部源(超出清单中一直要求的权限)。由于多种原因,此选项不是最佳选择。
在this answer中,备份保存在SD卡上:
final String inFileName = "/data/data/<your.app.package>/databases/foo.db";
File dbFile = new File(inFileName);
FileInputStream fis = new FileInputStream(dbFile);
String outFileName = Environment.getExternalStorageDirectory()+"/database_copy.db";
// Open the empty db as the output stream
OutputStream output = new FileOutputStream(outFileName);
// Transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer))>0){
output.write(buffer, 0, length);
}
// Close the streams
output.flush();
output.close();
fis.close();
但是,我的问题(可能是脑放问题)是 - 是否可以将备份保存到设备的内部文件(例如 Documents 文件夹),权限是否仍然存在需要吗?
实现权限的流程并不复杂。 Here is a class 我创建的帮助。您必须从此扩展您的 MainActivity,然后您可以调用:
verifyStoragePermissions(new Runnable() {
@Override
public void run() {
//backup your db here...
}
});
它适用于使用 android 支持库的所有 Android 版本。
我是 Android 应用程序开发的新手。然而,我目前的项目要求我制作一个应用程序来记录实地观察(我是一名研究科学家),将它们保存到 SQLite 数据库中——这些将被发送到一个中央位置进行处理。该应用将在平板电脑上使用。
目前,我正在使用 Android Studio,当我模拟应用程序功能时,一切都按计划进行并使用 DB Browser for SQLite,我可以看到值被正确记录在数据库中.
正在研究(一个例子是答案here),我知道数据库(.db
)文件保存在目录路径中:
/data/data/<your.app.package>/databases/foo.db
当然,这可以在 Android Studio 中访问,但我的理解是,除非设备已获得 root 权限,否则这些文件无法在实际设备中访问。由于种种原因,这不是我所从事的工作的选择。
在研究中发现了一种备份数据库的方法,并将备份的数据库保存到SD卡中,如Backup/restore sqlite db in android [duplicate] and the duplicate target Android backup/restore: how to backup an internal database?.
问题的答案在 23 及更高版本的 API 中保存到 SD 卡等外部存储设备现在需要相当多的权限才能写入外部源(超出清单中一直要求的权限)。由于多种原因,此选项不是最佳选择。
在this answer中,备份保存在SD卡上:
final String inFileName = "/data/data/<your.app.package>/databases/foo.db";
File dbFile = new File(inFileName);
FileInputStream fis = new FileInputStream(dbFile);
String outFileName = Environment.getExternalStorageDirectory()+"/database_copy.db";
// Open the empty db as the output stream
OutputStream output = new FileOutputStream(outFileName);
// Transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer))>0){
output.write(buffer, 0, length);
}
// Close the streams
output.flush();
output.close();
fis.close();
但是,我的问题(可能是脑放问题)是 - 是否可以将备份保存到设备的内部文件(例如 Documents 文件夹),权限是否仍然存在需要吗?
实现权限的流程并不复杂。 Here is a class 我创建的帮助。您必须从此扩展您的 MainActivity,然后您可以调用:
verifyStoragePermissions(new Runnable() {
@Override
public void run() {
//backup your db here...
}
});
它适用于使用 android 支持库的所有 Android 版本。