如何更改 Room 数据库的默认位置?
How can I change the default location of a Room database?
我想更改 Android 房间数据库的位置。我知道数据库在文件系统内部,我需要获得 root 权限,但我不想 root 我的 phone。
想法是将数据库位置更改为 SD 卡,并且无需 root 即可访问它 phone
只需将位置路径放在数据库名称中即可。
即:
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").build();
将路由器放在数据库名称中。
即:
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "/storage/emulated/0/folder/database-name").build();
并且不要忘记授予应用程序写入权限
谢谢@vitidev
更新
如果您的目标是 Android 10 或更高版本,请在应用的清单文件中将 requestLegacyExternalStorage 的值设置为 true:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
我也遇到了同样的情况。我使用与@joe06 相同的代码。
我们唯一缺少的是我们需要在调用 Room 构建之前创建目录。
private fun setUpDirectory() {
var dbDirectory =
Environment.getExternalStorageDirectory().absolutePath + "/data/abc/databases/"
var dbDirFile = File(dbDirectory)
if (!dbDirFile.exists()) {
dbDirFile.mkdirs()
}
}
创建目录后创建房间数据库将在您想要的任何位置创建数据库。
我想更改 Android 房间数据库的位置。我知道数据库在文件系统内部,我需要获得 root 权限,但我不想 root 我的 phone。
想法是将数据库位置更改为 SD 卡,并且无需 root 即可访问它 phone
只需将位置路径放在数据库名称中即可。
即:
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").build();
将路由器放在数据库名称中。
即:
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "/storage/emulated/0/folder/database-name").build();
并且不要忘记授予应用程序写入权限
谢谢@vitidev
更新
如果您的目标是 Android 10 或更高版本,请在应用的清单文件中将 requestLegacyExternalStorage 的值设置为 true:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
我也遇到了同样的情况。我使用与@joe06 相同的代码。
我们唯一缺少的是我们需要在调用 Room 构建之前创建目录。
private fun setUpDirectory() {
var dbDirectory =
Environment.getExternalStorageDirectory().absolutePath + "/data/abc/databases/"
var dbDirFile = File(dbDirectory)
if (!dbDirFile.exists()) {
dbDirFile.mkdirs()
}
}
创建目录后创建房间数据库将在您想要的任何位置创建数据库。