How To Read Android Properties With Java
I use 'adb shell getprop' in the terminal. What interfaces can I use in Android JAVA to get the same information? I have tried several things like: Properties sysProps = System.get
Solution 1:
I cleaned up TMont's solution and made it more generic (added parameter for propertyName):
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
publicclassSystemProperties {
privatestaticStringGETPROP_EXECUTABLE_PATH="/system/bin/getprop";
privatestaticStringTAG="MyApp";
publicstatic String read(String propName) {
Processprocess=null;
BufferedReaderbufferedReader=null;
try {
process = newProcessBuilder().command(GETPROP_EXECUTABLE_PATH, propName).redirectErrorStream(true).start();
bufferedReader = newBufferedReader(newInputStreamReader(process.getInputStream()));
Stringline= 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();
}
}
}
}
Solution 2:
In case someone wanted to know my solution... with George's help I ended up using this:
private String propReader() {
Processprocess=null;
try {
process = newProcessBuilder().command("/system/bin/getprop")
.redirectErrorStream(true).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
InputStreamin= process.getInputStream();
BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(process.getInputStream()));
StringBuilderlog=newStringBuilder();
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();
}
Solution 3:
System.getProperties() does not return the same properties as getprop.
To get getprop properties, try executing getprop using Runtime.exec() and reading its standard output.
Solution 4:
There actually is a system side implementation of the getprop
call. It is called Systemproperties.get()
and can be found here. For users, that work on system code inside the AOSP, or do want to take the risk of using reflect
, this is the way to go.
Solution 5:
For getting the system properties using reflection, try the below code snippet with your required property name.
public String getSerialNumber() {
String serialNumber;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Methodget= 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 none of the methods above workedif (serialNumber.equals("")) {
serialNumber = Build.SERIAL;
}
} catch (Exception e) {
e.printStackTrace();
serialNumber = "";
}
return serialNumber;
}
Post a Comment for "How To Read Android Properties With Java"