2015-01-26 17 views
8

ile Android özelliklerini nasıl okurum? Terminalde 'adb shell getprop' kullanıyorum. Aynı bilgileri almak için Android JAVA'da hangi arabirimleri kullanabilirim?Java ile

ben gibi bazı şeyleri denedim:

Properties sysProps = System.getProperties(); 

Ama bunlar aradığım aynı özellikleri olduğunu sanmıyorum? Özellikle, aşağıdaki gibi dönecektir değerleri bulmak istiyorum:

adb shell getprop | grep dolby 

kabuk 'grep dolby' komutu verir bu:

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

Ama Android JAVA kodunda bu bilgilere erişmek istediğiniz .

Herhangi bir fikrin var mı?

+0

bu sınıf erişmek gerekir https://android.googlesource.com/platform/frameworks/base.git/+/android-cts-4.2_r1/core/java/android/os/SystemProperties.java – njzk2

cevap

2

System.getProperties() değil getprop ile aynı özellikleri döndürür.

Getprop özelliklerinin elde edilmesi için, Runtime.exec() kullanarak ve standart çıktısını okuyarak getprop'u çalıştırmayı deneyin. Birisi George'un yardımıyla benim çözüm ... bilmek istedim durumda

+0

Nasıl yineleneceğinin farkındayım. Temel olarak cihazda dolby bilgilerini (varsa) içeren özellikleri arıyorum. Gördüğümden System.getProperties() değil. – TMont

+0

Anladım. Teşekkürler! – TMont

4

Bunu kullanarak sona erdi: Ben TMont en çözümünü temizledik

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

"Dolby" yi argüman olarak geçmek için bunu nasıl değiştirirdiniz? (Ya da tam prop?) – not2qubit

1

ve daha genel (ÖzellikAdı için eklenen parametre) yaptı:

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