0

请注意,这个问题不是关于在不知道键的情况下获取 SharedPreferences 对象的内容,而是关于如果不知道其名称是否可以自己获取 SharedPreferences。

假设有“文件名”“something-a”、“something-b”、“something-c”的 SharedPrefreferences 集合。那么是否有可能确定有 3 组 SharedPreferences 对象可用,并且能够在只知道其名称的“某物”部分时获取它们?

我猜没有,但希望有。

除了说需要将应用程序更新为 Marshmallows 权限模型并且它需要能够读取由旧版本应用程序编写的首选项文件,其中首选项名称为“某物-imsi”。如果用户没有授予 Marshmallow 的相关权限,则应用程序不知道 imsi,因此我试图找出应用程序在不知道全名时是否可以读取共享首选项。

4

2 回答 2

0

我认为不可能获得可用首选项的文件名列表。但是,如果您知道文件名,那么您可以获取SharedPreferencesand usegetAll方法的实例来获取该首选项集中存在的所有键。

这是文档: https://developer.android.com/reference/android/content/SharedPreferences.html#getAll()

例子:

    SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, 0);
    Map<String, ?> map = sharedPreferences.getAll();
    for (Map.Entry<String, ?> e : map.entrySet()) {
        String key = e.getKey();
        // this is the key that is present
    }
于 2015-10-14T23:37:47.173 回答
0

您可以使用SharedPreferences.getAll()此集合检索与您的模式匹配的字符串键的所有首选项并对其进行迭代。例如:

SharedPreferences prefs = ctx.getSharedPreferences(PREFS_NAME, 0);
Map<String, ?> pairs = prefs.getAll();
for (Map.Entry<String, ?> entry : pairs.entrySet()) {
    // Check for your string pattern here...
}

此答案假定您有一个共享首选项文件,其中的键与问题中描述的模式匹配。如果不是这种情况,并且您有多个与该模式匹配的动态命名的共享首选项文件,那么这是一个更难的问题。您可能会通过迭代中的文件来取得一些进展Context.getFilesDir()

于 2015-10-14T23:30:09.747 回答