【发布时间】:2011-10-04 02:47:28
【问题描述】:
我正在制作备份程序,将手机SharedPreferences 的数据保存到我自己结构的文件中。但我不知道如何将它们全部列出,我需要:
例如,2 个程序使用名称 "Program A" 和 "Program B" 保存了他们的 SharedPreferences。我需要获取包含这两个名称的字符串数组。然后,我将getSharedPreferences 与“程序A”一起使用,我需要获取程序保存的所有密钥。
真的可以吗?
EDIT1:我不知道手机上有哪些程序/活动。我想获得每个程序保存的所有keys。就像您备份所有手机数据一样,但仅备份 SharedPreferences 值。
例如:您的手机有 10 个程序,每个程序都会创建一个名为 Program 1 到 Program 10 的 SharedPreferences(当然,他们想要的任何名称)。我想获得所有这些Program 1 到Program 10 字符串。那么,如果Program 1 有5 个key 分别叫Key 1 到Key 5,我想获取这些key 的名字。
EDIT2:根据NikolaMKD 指南,这是我到目前为止所做的,但列表返回所有程序,在所有行都带有“无首选项”,即使在第一行,我也将 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));
}
}
【问题讨论】:
-
您的应用听起来需要 root 权限才能运行。
-
@Tom Dignan:我已经扎根了!
-
@Tom Dignan:呃,你的意思是?手机root,还是软件的root权限?我能用其他方法解决这个问题吗?
-
首选项通常对应用程序是私有的,因此除非设备已获得 root 权限,否则您将无法读取任意应用程序的首选项存储。
-
那不烂..这叫安全....
标签: android backup sharedpreferences