kotlin Android:有谁知道Android的房间数据库是否经过凭据加密?

jhkqcmku  于 2023-08-06  发布在  Kotlin
关注(0)|答案(2)|浏览(92)

我目前有一个BroadcastReceiver,它接收系统操作ACTION_LOCKED_ Boot _COMPLETED。当电话通电且用户尚未解锁其电话时,接收到这一消息。我有一个在前台启动的服务,然后尝试访问我的房间数据库。只不过它一旦命中数据库调用就失败了。
According to Android凭证加密存储被锁定,直到用户解锁电话。但我不知道这是否包括应用程序的内部房间数据库。
我在Logcat中发现的唯一错误是:

--------- beginning of crash

字符串
这可不是很有帮助。
我无法将调试器附加到它来查看完整的错误是什么,因为当我重新启动电话时,调试器示例丢失了。我也尝试通过ADB广播ACTION_LOCKED_ Boot _COMPLETED,但是它给出了一个拒绝的权限,因为这是一个系统操作。所以我在代码中依赖Logcat print语句。
我的应用程序会安排闹钟,所以我尝试获取闹钟的信息,并在不需要解锁设备的情况下设置闹钟。我可以使用 Boot _COMPLETED,但这意味着我依赖于用户解锁他们的手机。

1dkrff03

1dkrff031#

根据Android凭据加密存储被锁定,直到用户解锁手机.但我不知道这是否包括应用程序的内部房间数据库。
如果您的房间数据库名称是简单名称,则是。如果您提供一个完全限定的路径,那么它将取决于路径指向的位置(假设路径有效-我最近没有尝试过...)。
Room将其数据库存储在Android SQLiteDatabase类的默认数据库位置。它位于internal storage上,是凭据加密存储的一部分。

jtw3ybtb

jtw3ybtb2#

如果有人,甚至是OP,需要这些信息:
我们只需要将一个受设备保护的存储上下文作为参数传递给Room.databasebuilder方法。

private fun buildDatabase(context: Context): AlarmDatabase {
    val storageContext = context.createDeviceProtectedStorageContext()
    return Room.databaseBuilder(
        storageContext,
        AlarmDatabase::class.java,
        "my_database"
    ).build()
}

字符串
然后,实际的数据库文件将从该上下文创建,使其在设备解锁之前即可访问。

相关问题