我是Android开发新手。目前,我想加密名为"共享首选项"的自定义项并与PreferenceScreen集成,但未能成功。我正在使用依赖项:
- androidx.security:security-crypto:1.0.0-alpha02 [EncryptedSharedPreference]
- androidx.首选项:首选项:1.1.0 [首选项屏幕]
我曾试图研究这两个功能集成的相关信息,但没有找到相关信息。
根据我的测试,我有一个现有的加密共享首选项,并测试了以下API:
getPreferenceManager().setSharedPreferencesName("MyShared"); //MyShared Is custom named preference.
但它最终以朴素的价值拯救了偏好。
我的问题:
1.在现阶段是否有可能将这两个特性集成在一起?
- PreferenceScreen是否提供我不知道的加密功能?
1.如果我坚持使用EncryptedSharedPreference,我创建一个自定义活动外观像首选项屏幕会更好吗?
4条答案
按热度按时间vwoqyblh1#
A1:是的,有可能。
答3:您可以通过以下方式利用系统提供的设置。
由于Kotlin是首选的一等公民,现在我将在Kotlin中显示它,@Rikka在另一个答案中有一个Java版本。对于Kotlin,诀窍是仍然设置
preferencesDataSource
,它是这样的:Kotlin版本的
EncryptedPreferenceDataStore
:我使用also
关键字作为单例,类似于Singleton with parameter in Kotlin中与Google源代码相关的Room示例也许通过双重同步检查,它可以更安全地运行线程?
bgibtngc2#
使用
getPreferenceManager().setPreferenceDataStore(PreferenceDataStore)
。PreferenceDataStore
提供了更改首选项加载/保存方式的功能。PreferenceDataStore
的简单实现:qcbq4gxm3#
我在将EncryptedSharePreferences与AndroidX首选项GUI集成时遇到了一些问题。
PreferenceManager.getDefaultSharedPreferences(context);
没有对应的set方法。我创建的解决方案是不依赖于SharedPreferences,而是利用PreferenceFragmentCompat写入EncryptedPreferenceDataStore,但是,这仍然会带来一个问题,即默认值在用户进入Preference屏幕之前不会初始化。
依赖项
首选项片段
加密首选项数据存储
用法
yquaqz184#
我在这里找到了答案,添加了一点Kotlin糖使它更短,避免使用未发布的库版本,下面是结果:
依赖项:
数据存储:
首选项片段:
用法:
备注:
SharedPreferences.Editor
的put ...函数,因为put ...函数的返回值与PreferenceDataStore
不同,并且还需要调用apply()
。1.不使用单例是我对单例的品味,单例依赖于参数,并在下次调用时忽略参数。但这是另一个主题。我建议从
class MyApplication : Application()
调用prepareDataStore
,并将其Context
参数改为Application
,以明确这一点。