Get battery level before broadcast receiver responds for Intent.ACTION_BATTERY_CHANGED

后端 未结 6 1796
囚心锁ツ
囚心锁ツ 2020-11-28 03:56

I have a broadcast receiver in my program to get react to the battery level like so:

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
           


        
6条回答
  •  无人及你
    2020-11-28 04:11

    This is how to get the battery level without registering a receiver:

    Intent batteryIntent = context.getApplicationContext().registerReceiver(null,
                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int rawlevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    double scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
    double level = -1;
    if (rawlevel >= 0 && scale > 0) {
        level = rawlevel / scale;
    }
    

    It can use a null BroadcastReceiver because of the sticky nature of the broadcast.

    It uses the getApplicationContext() trick in case you are in a intent receiver and get the exception:

    android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents

提交回复
热议问题