programacion - manual de android en pdf
Android: ¿Viendo el archivo SharedPreferences? (2)
Para fines de depuración, necesito acceder al archivo de preferencias compartidas de mi aplicación. Por lo que sé, debería encontrar este archivo en / data / ... pero no puedo acceder a la carpeta / data a través de los permisos faltantes. ¿Esto es normal? ¿Alguna forma de seguir accediendo al archivo? (¿excepto tal vez eliminarlo desde dentro de la aplicación?) El teléfono no está rooteado y tampoco quiero rootearlo. Gracias por cualquier pista!
Desafortunadamente, no hay una buena forma de acceder a la carpeta / data en un teléfono sin rootear. Puede intentar crear los archivos con MODE_WORLD_READABLE
manera:
SharedPreferences myPrefs = this.getSharedPreferences("prefs", MODE_WORLD_READABLE);
y luego intente usar adb pull
para obtener el archivo en el escritorio.
adb pull /data/data/<packagename>/shared_prefs/prefs.xml
pero tu kilometraje puede variar.
Me he topado con este problema en el pasado (no tengo permiso de root en el sistema de archivos pero necesito acceso a la carpeta de datos de las aplicaciones). Si no tiene un dispositivo rooteado o un dispositivo desarrollador como ADP1, puede intentar ejecutar su aplicación en el emulador y luego acceder a los archivos desde el "Explorador de archivos" en eclipse o DDMS.
EDITAR # 1: intente usar la función getAll de sharedPreferences y guardar eso en un archivo, veré si puedo reunir una muestra.
EDIT # 2: Código de ejemplo, creado a partir de muestras aleatorias alrededor de la red, probablemente no sea la mejor manera de hacerlo, pero lo probé y funciona. Escribe un archivo en la raíz de tu sdcard. Asegúrate de tener
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
puesto en tu manifiesto
private void saveSharedPreferences()
{
// create some junk data to populate the shared preferences
SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
SharedPreferences.Editor prefEdit = prefs.edit();
prefEdit.putBoolean("SomeBooleanValue_True", true);
prefEdit.putInt("SomeIntValue_100", 100);
prefEdit.putFloat("SomeFloatValue_1.11", 1.11f);
prefEdit.putString("SomeStringValue_Unicorns", "Unicorns");
prefEdit.commit();
// BEGIN EXAMPLE
File myPath = new File(Environment.getExternalStorageDirectory().toString());
File myFile = new File(myPath, "MySharedPreferences");
try
{
FileWriter fw = new FileWriter(myFile);
PrintWriter pw = new PrintWriter(fw);
Map<String,?> prefsMap = prefs.getAll();
for(Map.Entry<String,?> entry : prefsMap.entrySet())
{
pw.println(entry.getKey() + ": " + entry.getValue().toString());
}
pw.close();
fw.close();
}
catch (Exception e)
{
// what a terrible failure...
Log.wtf(getClass().getName(), e.toString());
}
}