1

javaを使わずにネイティブアプリで現在のバッテリー残量を読み取りたい。Java で同等のものは次のようになります。

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

ネイティブ コードのみを使用することで、これがどのように可能になるのでしょうか?

4

1 に答える 1

1

プログラムで実行される可能性のある dumpsys ユーティリティに関するこのトピックを参照して、IO 出力バッファーを読み取ります。あなたが探している C++ ソースはほとんど見つかりませんでした。dumpsys の実行には、root 権限が必要な場合があります。

Android ADB シェル「dumpsys」ツールとは何ですか?その利点は何ですか?

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 クラスのプライベート メンバー フィールドを更新する JNI インターフェイスのもののようです。OnLoad クラスは jni<->Java フックを登録しますが、ここで参照するために知っておく必要があることはありません。

于 2013-01-18T20:44:33.663 に答える