2013-01-18 5 views
0

Java를 사용하지 않고 기본 앱에서 현재 배터리 수준을 읽고 싶습니다. 자바에서 이에는 다음과 같습니다native app get batterylevel

BroadcastReceiver batteryReceiver = new BroadcastReceiver() { 
    int scale = -1; 
    int level = -1; 
    int voltage = -1; 
    int temp = -1; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
     scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
     temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); 
     voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); 
     Log.e("BatteryManager", "level is "+level+"/"+scale+", temp is "+temp+", voltage is "+voltage); 
    } 
}; 

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
registerReceiver(batteryReceiver, filter); 

방법이 네이티브 코드를 사용하는 경우에만 가능하다?

답변

1

dumpsys 유틸리티에 대한 내용은 프로그래밍 방식으로 실행하고 IO 출력 버퍼를 읽을 수 있습니다. 찾을 C++ 소스가 거의 없습니다. dumpsys를 실행하려면 루트 권한이 필요할 수 있습니다.

What's the Android ADB shell "dumpsys" tool and what are its benefits?

http://source.android.com/tech/input/dumpsys.html

http://code.metager.de/source/xref/android/4.1.1/frameworks/base/services/java/com/android/server/BatteryService.java

http://code.metager.de/source/xref/android/4.1.1/frameworks/native/cmds/dumpsys/dumpsys.cpp

http://code.metager.de/source/xref/android/4.1.1/frameworks/base/services/jni/com_android_server_BatteryService.cpp

http://code.metager.de/source/xref/android/4.1.1/frameworks/base/services/jni/onload.cpp

C++ 소스 인 경우, 오른쪽에/sys/class/power_supply 가상 디렉터리를 읽습니다. 그런 다음 Linux 시스템의 내부 세부 사항에 대해 더 자세히 설명합니다. 대부분의 코드는 BatteryService.java 클래스의 private 멤버 필드를 업데이트하는 JNI 인터페이스로 보인다. OnLoad 클래스는 jni < -> java hooks를 등록합니다.하지만 여기서는 참조하기 위해 알아야 할 것이 없습니다.

+0

이미 dumpsys로 레벨을 읽으 려한다고 생각했지만 이미 말했듯이, 루트가 필요합니다 ...하지만 결국에는 저에게 효과적이었습니다. 감사합니다! – bricklore

관련 문제