请注意,如果密钥未知,则此问题不是获取SharedPreferences对象的内容,而是如果其名称未知,是否可以自己获取SharedPreferences。
假设SharedPrefreferences集合中包含“文件名”“something-a”,“something-b”,“something-c”。那么是否可以确定有3组SharedPreferences对象可用,并且当只知道其名称的“某些 - ”部分时能够获取它们?
我想不是,但希望有。
我没有深入了解该要求背后的原因,除非要求将应用程序更新为Marshmallows权限模型,并且它需要能够读取由应用程序的旧版本编写的首选项文件,其中首选项名称是“东西 - imsi”。如果用户未在Marshmallow上授予相关权限,则应用程序不知道imsi,因此我试图找出应用程序在不知道全名时是否可以读取共享首选项。
答案 0 :(得分: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()
答案 1 :(得分:0)
我认为不可能获得首选项的文件名列表。虽然如果您知道文件名,那么您可以获取SharedPreferences
的实例并使用getAll
方法来获取该组首选项中的所有密钥。
以下是文档: 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
}