获取所有SharedPreferences名称及其所有密钥?

Luk*_* Vo 7 backup android sharedpreferences

我正在制作备份程序,将手机SharedPreferences数据保存到我自己的结构文件中.但我不知道如何列出所有这些,我需要:

例如,2个程序用名称"Program A"和保存了它们的SharedPreferences "Program B".我需要获取thay String数组包含这两个名字.然后,我使用getSharedPreferences"程序A",我需要获得程序保存的所有键.

真的有可能吗?

编辑1:我不知道手机上的节目/活动.我希望得到所有keys节目保存的所有内容.就像您备份所有手机数据一样,但只备份SharedPreferences值.

例如:您的手机有10个程序,每个程序创建一个名为SharedPreferences Program 1Program 10(当然,他们想要的任何名称).我想获得所有这些Program 1Program 10字符串.然后,如果Program 1有5个按键叫Key 1Key 5,我想要获得这些密钥的名字.

编辑2:根据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));
    }



}
Run Code Online (Sandbox Code Playgroud)

Nik*_*ski 10

从中获取所有_preferences.xml

/data/data/(package)/shared_prefs/(package)_preferences.xml

解析XML,在XML中有每个键的名称.我可能会误解你的问题


小智 6

尝试这个:

    Map<String, ?> allPrefs = prefs.getAll(); //your sharedPreference
    Set<String> set = allPrefs.keySet();
    for(String s : set){
        LOG.d(TAG, s + "<" + allPrefs.get(s).getClass().getSimpleName() +"> =  "
                + allPrefs.get(s).toString());
    }
Run Code Online (Sandbox Code Playgroud)


Iro*_*som 5

使用sharedPreference.getAll();返回一个Map.