我正在制作备份程序,用于将手机中的SharedPreferences数据保存到我自己定义的文件中。但我不知道如何列出所有这些数据,这是我需要做的:
例如,有两个程序使用名称"Program A"和"Program B"保存了他们的SharedPreferences。我需要获取包含这两个名称的字符串数组。然后,我使用"Program A"的getSharedPreferences方法,我需要获取该程序保存的所有键名。
真的可能吗?
编辑1:我不知道手机上有哪些程序/活动。我想要获取每个程序保存的所有键名。就像你备份手机所有数据一样,但只备份SharedPreferences值。
例如:你的手机有10个程序,每个程序创建一个名为Program 1到Program 10的SharedPreferences(当然,它们可以随意命名)。我想获取所有这些Program 1到Program 10的字符串。然后,如果Program 1有5个叫做Key 1到Key 5的键名,我想获取这些键名。
编辑2:根据NikolaMKD的指导,我已经完成了以下操作,但列表返回所有程序,每行都显示"No Preferences",即使在第一次保存SharedPreferences时,我的活动也是如此。
例如,有两个程序使用名称"Program A"和"Program B"保存了他们的SharedPreferences。我需要获取包含这两个名称的字符串数组。然后,我使用"Program A"的getSharedPreferences方法,我需要获取该程序保存的所有键名。
真的可能吗?
编辑1:我不知道手机上有哪些程序/活动。我想要获取每个程序保存的所有键名。就像你备份手机所有数据一样,但只备份SharedPreferences值。
例如:你的手机有10个程序,每个程序创建一个名为Program 1到Program 10的SharedPreferences(当然,它们可以随意命名)。我想获取所有这些Program 1到Program 10的字符串。然后,如果Program 1有5个叫做Key 1到Key 5的键名,我想获取这些键名。
编辑2:根据NikolaMKD的指导,我已经完成了以下操作,但列表返回所有程序,每行都显示"No Preferences",即使在第一次保存SharedPreferences时,我的活动也是如此。
public class Test extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences preferences = getSharedPreferences("Test", 1);
// No matter what name is: Test or the package name
Editor editor = preferences.edit();
editor.putInt("TestKey", 0);
editor.commit();
List<ResolveInfo> Temp =
getPackageManager().queryIntentActivities(
new Intent(Intent.ACTION_MAIN, null)
.addCategory(Intent.CATEGORY_LAUNCHER), 0);
String[] App = new String[Temp.size()];
for (int i = 0; i < Temp.size(); i++) {
App[i] = Temp.get(i).activityInfo.name;
FileReader reader = null;
try {
reader = new FileReader("/data/data/"
+ App[i] + "/shared_prefs/" + App[i] + "_preferences.xml");
} catch (FileNotFoundException e) {
reader = null;
}
if (reader != null)
App[i] += " (Have Prefereces)";
else
App[i] += " (No Prefereces)";
}
setListAdapter(new ArrayAdapter<String>(this, R.layout.main, App));
}
}