Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java读取Android属性_Java_Android_Shell_Adb_Getproperties - Fatal编程技术网

如何使用Java读取Android属性

如何使用Java读取Android属性,java,android,shell,adb,getproperties,Java,Android,Shell,Adb,Getproperties,我在终端中使用“adb shell getprop”。 我可以在Android JAVA中使用哪些接口来获取相同的信息 我尝试过以下几种方法: Properties sysProps = System.getProperties(); 但我不认为这些是我正在寻找的相同的属性?具体而言,我希望找到返回类似以下内容的值: adb shell getprop | grep dolby shell“grep dolby”命令返回以下内容: [audio.dolby.ds2.enabled]: [tr

我在终端中使用“adb shell getprop”。 我可以在Android JAVA中使用哪些接口来获取相同的信息

我尝试过以下几种方法:

Properties sysProps = System.getProperties();
但我不认为这些是我正在寻找的相同的属性?具体而言,我希望找到返回类似以下内容的值:

adb shell getprop | grep dolby
shell“grep dolby”命令返回以下内容:

[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代码中访问这些信息

有什么想法吗?

System.getProperties()不会返回与getprop相同的属性


要获取getprop属性,请尝试使用Runtime.exec()执行getprop并读取其标准输出。

如果有人想知道我的解决方案。。。在乔治的帮助下,我最终使用了这个:

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

我清理了TMont的解决方案并使其更通用(为propertyName添加了参数):


实际上有一个
getprop
调用的系统端实现。它被称为
Systemproperties.get()
,可以找到。对于在AOSP内处理系统代码的用户,或者确实想冒险使用
反射的用户,这是一种方法。

要使用反射获取系统属性,请使用以下代码段和所需的属性名称

公共字符串getSerialNumber(){
字符串序列号;
试一试{
Class c=Class.forName(“android.os.SystemProperties”);
方法get=c.getMethod(“get”,String.class);
serialNumber=(String)get.invoke(c,“ril.serialNumber”);
if(serialNumber.equals(“”)
serialNumber=(String)get.invoke(c,“ro.serialno”);
if(serialNumber.equals(“”)
serialNumber=(String)get.invoke(c,“ro.boot.serialno”);
if(serialNumber.equals(“”)
serialNumber=(String)get.invoke(c,“ro.kernel.androidboot.serialno”);
//如果上述方法均无效
if(serialNumber.equals(“”){
serialNumber=Build.SERIAL;
}
}捕获(例外e){
e、 printStackTrace();
序号=”;
}
返回序列号;
}

我知道如何迭代。我基本上是在寻找设备上包含杜比信息(如果可用)的属性。据我所见,它不是System.getProperties()。您需要访问该类。如何修改该类以将“dolby”作为参数传递?(还是确切的道具?)
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();
            }
        }
    }
}