Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Obtener todos los nombres SharedPreferences y todas sus claves?

Estoy haciendo el programa de copia de seguridad, que guardó el teléfono SharedPreferences datos en un archivo de mi propia estructura. Pero no sé cómo enumerarlos todos, que necesito:

Por ejemplo, el programa 2 guardó sus SharedPreferences con los nombres "Program A" y "Program B" . Necesito obtener thay String array contienen estos 2 nombres. Entonces, yo uso getSharedPreferences con "Programa A", necesito obtener todas las claves que el programa ha guardado.

¿Es realmente posible?

EDIT1: No sé qué programas / actividades en el teléfono. Quiero obtener TODAS las keys que guardan todos los programas. Al igual que hacer una copia de seguridad de todos los datos de su teléfono, pero sólo SharedPreferences valores.

Por ejemplo: Su teléfono tiene 10 programas, cada uno crea una SharedPreferences llamada Program 1 a Program 10 (pero por supuesto, cualquier nombre que deseen). Y me gustaría obtener todos estos Program 1 a Program 10 . Entonces, si el Program 1 tiene 5 llaves llamadas la Key 1 a la Key 5 , quiero conseguir estas llaves nombre.

EDIT2: De acuerdo con la guía NikolaMKD , esto es lo que he hecho hasta ahora, pero la lista devuelve todos los programas, con "No Preferences" en toda la línea, incluso en la primera, guardé SharedPreferences con mi actividad:

 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 Solutions collect form web for “Obtener todos los nombres SharedPreferences y todas sus claves?”

Obtenga todas las _preferences.xml de

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

Analizar el XML, en el XML hay nombre para cada clave. Podría haber malinterpretado tu pregunta

No pienses que es posible, No puedes leer otras aplicaciones / datos / datos / carpeta. En el emulador puede leerlos porque tiene acceso root.

Utilice sharedPreference.getAll(); Que devuelve un Map .

Prueba esto:

  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()); } 

Es una buena pregunta, y no creo que haya una manera sencilla de hacerlo. La mejor manera de hacerlo sería almacenar estos nombres en DefaultSharedPreferences o algún tipo de matriz global, o puede recuperar las sharedPreferences de la actividad misma si conoce el ID de recurso de preferencia:

 String packageName = String packageName = context.getPackageName(); Resources resources = context.getResources(); String sharedPrefName = resources.getResourceEntryName(R.id.PREFERENCES_RESOURCE_ID); sharedPrefName = packageName+"_"+sharedPrefName; 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.