2015-01-26 23 views
8

Ich benutze 'adb shell getprop' im Terminal. Welche Schnittstellen kann ich in Android JAVA verwenden, um dieselben Informationen zu erhalten?So lesen Sie Android-Eigenschaften mit Java

Ich habe wie einige Dinge ausprobiert:

Properties sysProps = System.getProperties(); 

Aber ich glaube nicht, das sind die gleichen Eigenschaften die ich suche? Insbesondere möchte ich Werte finden, die ähnlich der folgenden zurück:

adb shell getprop | grep dolby 

Die Shell ‚grep dolby‘ Befehl gibt diese:

[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] 

Aber ich möchte auf diese Informationen zuzugreifen in Android JAVA-Code .

Irgendwelche Ideen?

+0

Sie würden den Zugang zu dieser Klasse müssen https://android.googlesource.com/platform/frameworks/base.git/+/android-cts-4.2_r1/core/java/android/os/SystemProperties.java – njzk2

Antwort

2

System.getProperties() gibt nicht die gleichen Eigenschaften wie getprop zurück.

Um getprop-Eigenschaften zu erhalten, versuchen Sie, getprop mit Runtime.exec() auszuführen und die Standardausgabe zu lesen.

+0

Ich bin mir bewusst, wie man iteriert. Ich suche grundsätzlich nach den Eigenschaften, die die Dolby-Info (falls vorhanden) auf dem Gerät enthalten. Es ist nicht System.getProperties() von was ich sehen kann. – TMont

+0

Verstanden. Vielen Dank! – TMont

4

Falls jemand wollte, dass meine Lösung wissen ... mit George Hilfe landete ich mit diesem:

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

Wie würden Sie dies ändern, um "dolby" als Argument zu übergeben? (Oder genaue Stütze?) – not2qubit

1

I TMont-Lösung gereinigt und machte es mehr Generika (hinzugefügt Parameter für Eigenschaftsname):

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