Android 如何将密码传递给sqlcipher ContentProvider

Android 如何将密码传递给sqlcipher ContentProvider,android,android-contentprovider,password-protection,sqlcipher,Android,Android Contentprovider,Password Protection,Sqlcipher,我正在尝试在我的应用程序中实现一个安全数据库,该数据库要求用户在应用程序启动时输入密码。他们输入的密码用于解密包含他们数据的sqlcipher数据库。我遇到的难题是如何将密码传递给内容提供商 现在,我正在将密码临时存储在共享首选项中,以便我的contentprovider访问它,然后在我的MainActivity中调用onStop时删除SharedReference。然而,一旦我介绍了多种活动,这似乎过于复杂了。是否有更有效的方法仅为当前应用程序会话设置我的sqlcipher ContentPr

我正在尝试在我的应用程序中实现一个安全数据库,该数据库要求用户在应用程序启动时输入密码。他们输入的密码用于解密包含他们数据的sqlcipher数据库。我遇到的难题是如何将密码传递给内容提供商

现在,我正在将密码临时存储在共享首选项中,以便我的contentprovider访问它,然后在我的MainActivity中调用onStop时删除SharedReference。然而,一旦我介绍了多种活动,这似乎过于复杂了。是否有更有效的方法仅为当前应用程序会话设置我的sqlcipher ContentProvider的密码

我遇到的难题是如何将密码传递给内容提供商

选项1:不要使用ContentProvider

选项2:对ContentResolver使用call,这反过来调用对ContentProvider的调用。这是一个特殊的通信路径,您可以在其中定义其基本含义。您可以将其用作一种设置密码短语的机制,在这种机制中,UI层收集密码短语并通过调用将其传递给提供者。请注意,这需要minsdk版本11或更高版本

在这两个选项中,我强烈推荐选项1

现在,我正在将密码临时存储在共享首选项中,以便我的contentprovider访问它,然后在我的MainActivity中调用onStop时删除SharedReference


将密码短语以明文形式写入磁盘。请不要这样做。

欢迎使用StackOverflow。请花点时间,仔细阅读有关的提示。问一个好问题会提高你得到答案的机会。同样非常重要的是,在你发布你的问题之前,你首先要做一些搜索,并指出到目前为止你在你的网站上尝试了什么。这会让社区成员了解您已经探索过的解决方案。感谢您的快速响应!如果我选择不使用ContentProvider,您会建议我将当前的ContentProvider类转换为实用程序类,以避免在片段中编写数据库调用吗?@Dillonconolly:抽象地说,这很难回答。有些人将该代码放在SQLiteOpenHelper上。有些有一个实用类。那些使用ORM的人通常两者都没有,因为ORM或多或少地填补了这个角色。在您的情况下,关键是您将自己设置为能够在获得密码短语时打开数据库,并安全地确保在此之前不尝试使用数据库。