Получить все SharedPreferences имена и все их ключи?
я делаю резервную программу, которая сохранила телефон SharedPreferences
данные в файл из моей структуры. Но я не знаю, как перечислить их все, что мне нужно:
например, 2 программы сохранили свои SharedPreferences с именами "Program A"
и "Program B"
. Мне нужно получить строковый массив thay, содержащий эти 2 имени. Тогда я использую getSharedPreferences
С "программой A" мне нужно получить все ключи, которые программа сохранила.
это действительно возможно?
EDIT1: я не знаю, что программы/мероприятия по телефону. Я хочу получить все keys
что все программы сохраняются. Это так же, как вы резервное копирование всех данных телефона, но только SharedPreferences значения.
например: ваш телефон имеет 10 программ, каждая из которых создает SharedPreferences с именем Program 1
to Program 10
(но, конечно, какое бы имя они ни хотели). И я хотел бы получить все это Program 1
to Program 10
строку. Тогда, если Program 1
имеет 5 клавиш Key 1
to Key 5
, я хочу получить эти ключи имя.
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));
}
}
5 ответов
получить все _preferences.xml от
/data/data/(package)/shared_prefs/(package)_preferences.xml
проанализируйте XML, в XML есть имя для каждого ключа. Я могу неправильно понять ваш вопрос
Не думаю, что это возможно, вы не можете читать другие приложения /данные/данные/ папку. На эмуляторе вы можете прочитать их, потому что у вас есть root-доступ.
попробуйте это:
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());
}
Это хороший вопрос, и я не думаю, что есть простой способ сделать это. Лучший способ сделать это-либо сохранить эти имена в DefaultSharedPreferences, либо в каком-то глобальном массиве, или вы можете получить sharedPreferences из самого действия, если вы знаете идентификатор ресурса предпочтения:
String packageName = String packageName = context.getPackageName();
Resources resources = context.getResources();
String sharedPrefName = resources.getResourceEntryName(R.id.PREFERENCES_RESOURCE_ID);
sharedPrefName = packageName+"_"+sharedPrefName;