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.
- Preferencias compartidas dentro de broadcastreceiver
- Android: ¿Configurar las preferencias compartidas durante la instalación?
- Cómo resolver un error: getSharedPreferences (String, int) no está definido para el tipo nuevo View.OnClickListener () {}
- Configuración de valores predeterminados de varias instancias / archivos de SharedPreferences
- Usar SharedPreferences en modo multiproceso
¿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)); } }
- Unidad de Google para realizar copias de seguridad y restaurar la base de datos y las preferencias compartidas de la aplicación de Android
- ¿La aplicación de actualización borra las preferencias compartidas o elimina las alarmas establecidas por la aplicación?
- Copia de seguridad de SharedPreferences de Android no funciona
- Accountmanager vs sharedpreference para la autenticación y la comunicación con el servidor
- SharedPreferences Borrar / Guardar
- BackupManager no llama al servicio de transporte de copia de seguridad
- Cerrar sesión cerrar SharedPreferences
- Botón Inicio de la barra de acciones no funcional con PreferredScreen anidado
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;
- Android Studio – No se puede resolver el símbolo 'firebase'
- La versión de Android de C # 's Console.WriteLine?