2015-01-26 14 views
8

Я использую 'adb shell getprop' в терминале. Какие интерфейсы я могу использовать в Android JAVA для получения той же информации?Как читать свойства Android с Java

Я попробовал несколько вещей, как:

Properties sysProps = System.getProperties(); 

Но я не думаю, что это один и то же свойство я ищу? В частности, я хочу, чтобы найти значения, которые будут возвращать подобное следующему:

adb shell getprop | grep dolby 

Оболочка «GREP Долби» команда возвращает это:

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

Но я хочу, чтобы получить доступ к этой информации в Android JAVA код ,

Любые идеи?

+0

вы должны иметь доступ к этому классу https://android.googlesource.com/platform/frameworks/base.git/+/android-cts-4.2_r1/core/java/android/os/SystemProperties.java – njzk2

ответ

2

System.getProperties() делает не возвращает те же свойства, что и getprop.

Чтобы получить свойства getprop, попробуйте выполнить getprop с помощью Runtime.exec() и прочитав его стандартный вывод.

+0

Я знаю, как итерации. В основном я ищу свойства, содержащие информацию о дольби (если доступно) на устройстве. Это не System.getProperties() из того, что я вижу. – TMont

+0

Получил это. Благодаря! – TMont

4

В случае, если кто хотел бы знать, мое решение ... с помощью Джорджа я в конечном итоге с помощью этого:

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» в качестве аргумента? (Или точную опору?) – not2qubit

1

я вымыл решение TMont и сделал его более общий (добавлен параметр для ИмяСвойства):

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

 Смежные вопросы

  • Нет связанных вопросов^_^