【问题标题】:Android project with different modules(sharedPreferences)具有不同模块的 Android 项目(sharedPreferences)
【发布时间】:2016-05-27 10:35:15
【问题描述】:

有谁知道android是否支持在一个项目中编译的多个Android模块之间共享相同的sharedpreference?

我有两个共享首选项,目前当我尝试从当前模块之外的共享首选项访问一些数据时,它不起作用并改为创建一个新的 sharedPrefence

例子

模块一:

 mSharedPreferences = context.getSharedPreferences(
                "pref", Context.MODE_PRIVATE);

模块二:

 mSharedPreferences = context.getSharedPreferences(
                "pref", Context.MODE_PRIVATE);

它创建两个首选项文件,而不是一个两个模块可以共享数据的首选项文件

【问题讨论】:

    标签: android android-sharedpreferences


    【解决方案1】:

    您可以创建一个通用 :core 模块并将所有依赖项添加到该模块中。

    在所有其他模块中实现 :core 模块。

    PrefHelpers 类放在 :core 模块中,以便从任何模块或 您可以使用BuildConfig.APPLICATION_ID 获取通用包名来配置sharedpreference。

     mSharedPreferences = context.getSharedPreferences(
                    "pref", Context.MODE_PRIVATE);
    

    可以替换为

    mSharedPreferences = context.getSharedPreferences(
                    BuildConfig.APPLICATION_ID, Context.MODE_PRIVATE);
    

    您可以将模式用作Context.MODE_PRIVATE 本身。

    确保您的 BuildConfig 来自您的 :core 模块。

    如果它解决了您的问题,请回复评论。

    【讨论】:

    • 这个:core 模块将依赖:app 模块来获取对应用程序上下文的引用。对吗?
    • 您是否设法使用此解决方案?两个模块之间的上下文不同,所以我不确定context.getSharedPreferences 会导致相同的位置
    【解决方案2】:

    您可以通过设置 Context.MODE_WORLD_READABLE(在 API 17 中已弃用)来实现,但强烈不推荐。 我会使用 ContentProviderBroadcastReceiverService 在两个模块之间传递数据,正如上面链接在文档中所建议的那样。

    【讨论】:

    • 他们绝对不希望它被使用:Starting from N, attempting to use this mode throws a SecurityException.
    猜你喜欢
    • 2015-05-02
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多