Cómo leer las propiedades de Android con Java
Utilizo 'getbop de shell adb' en el terminal. ¿Qué interfaces puedo utilizar en Android JAVA para obtener la misma información?
He intentado varias cosas como:
- Cambiar el usuario y el grupo de archivos de la aplicación de Android para replicar el problema que el usuario está teniendo
- Activar / desactivar NFC con comando ADB
- Android adb, recuperar base de datos utilizando run-as
- Ejecución de un comando de shell para copiar archivos de la aplicación Android
- Cambiar permiso de archivo en la aplicación
Properties sysProps = System.getProperties();
Pero no creo que estas son las mismas propiedades que estoy buscando? En concreto, quiero encontrar valores que volverán similares a los siguientes:
adb shell getprop | grep dolby
El comando 'grep dolby' de la shell devuelve esto:
[audio.dolby.ds2.enabled]: [true] [dolby.audio.sink.info]: [headset] [dolby.ds.dialogenhancer.state]: [on] [dolby.ds.graphiceq.state]: [off] [dolby.ds.hpvirtualizer.state]: [off] [dolby.ds.intelligenteq.preset]: [Off] [dolby.ds.intelligenteq.state]: [off] [dolby.ds.platform]: [qcom] [dolby.ds.profile.name]: [Movie] [dolby.ds.spkvirtualizer.state]: [off] [dolby.ds.state]: [off] [dolby.ds.volumeleveler.state]: [on]
Pero quiero acceder a esta información en el código JAVA de Android.
¿Algunas ideas?
- Cómo salir de APK de shell
- Android Shell EOF
- Adb pull -> dispositivo no encontrado
- Android: Adb rechazó la conexión al cliente
- Problemas con el script wifi de Android
- Copiar archivos en el shell de ADB con run-as
- Cómo obtener la versión SDK de Android de un dispositivo desde la línea de comandos
- Repo: comando no encontrado en la secuencia de comandos automatizada bash para crear cyanogenmod
System.getProperties () no devuelve las mismas propiedades que getprop.
Para obtener propiedades getprop, intente ejecutar getprop utilizando Runtime.exec () y leer su salida estándar.
En caso de que alguien quisiera saber mi solución … con la ayuda de George terminé usando esto:
private String propReader() { Process process = null; try { process = new ProcessBuilder().command("/system/bin/getprop") .redirectErrorStream(true).start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } InputStream in = process.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); StringBuilder log = new StringBuilder(); String line; try { while ((line = bufferedReader.readLine()) != null) { if (line.contains("dolby")) log.append(line + "\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(in); process.destroy(); return log.toString(); }
Limpié la solución de TMont y la hice más genérica (parámetro añadido para propertyName):
import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class SystemProperties { private static String GETPROP_EXECUTABLE_PATH = "/system/bin/getprop"; private static String TAG = "MyApp"; public static String read(String propName) { Process process = null; BufferedReader bufferedReader = null; try { process = new ProcessBuilder().command(GETPROP_EXECUTABLE_PATH, propName).redirectErrorStream(true).start(); bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = bufferedReader.readLine(); if (line == null){ line = ""; //prop not set } Log.i(TAG,"read System Property: " + propName + "=" + line); return line; } catch (Exception e) { Log.e(TAG,"Failed to read System Property " + propName,e); return ""; } finally{ if (bufferedReader != null){ try { bufferedReader.close(); } catch (IOException e) {} } if (process != null){ process.destroy(); } } } }
- Android – La altura de la estructura del marco no coincide con el diseño del coordinador
- ¿Cómo usar la pantalla de bloqueo de contraseña predeterminada en nuestra aplicación de Android?