如何更改 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()
        }
    }

创建目录后创建房间数据库将在您想要的任何位置创建数据库。