7

パーセンテージごとにバッテリーの変化を検出したい。ブロードキャストレシーバーでバッテリーレベルを一度検出できます。ただし、% が 66 から 67 に変更された場合、値は自動的に更新されません。

これが私のコードです。

   private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                Log.i("Battery CHANGED******",":: IN RECEIVER");

                int rawlevel = intent.getIntExtra("level", -1);
                int scale = intent.getIntExtra("scale", -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                btnConsumer.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);

    }

追加された権限

 <uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission>

66 を検出しますが、65 または 67 を変更しても値は更新されません。またはログも表示しない

私はすべての変更を取得できるようにしたいです。

前もって感謝します。

4

2 に答える 2

16

BATTERY_STATSまず、許可は必要ありません。

次に、 の最初の行で をonReceive()登録解除するBroadcastReceiverため、それ以上の更新を取得できなくなります。

第 3 に、1% の変化ごとにバッテリー情報が提供されるという保証はありません。たとえば、モトローラの携帯電話の多くACTION_BATTERY_CHANGEDは、バッテリーが少なくなるまで 10% ごとにしか送信しません。ブロードキャストの頻度ACTION_BATTERY_CHANGEDは、ユーザーではなく、デバイスの製造元が決定します。

于 2012-04-17T11:08:36.767 に答える