如何检测电池电量低时:安卓?

2022-09-03 16:32:06

我想在设备的电池电量降低时关闭我的应用。我在清单中添加了以下代码。

 <receiver android:name=".BatteryLevelReceiver" 
         <intent-filter>
            <action android:name="android.intent.action.ACTION_BATTERY_LOW" />
            <action android:name="android.intent.action.ACTION_BATTERY_OKAY" />
        </intent-filter>
 </receiver>

并在接收器中遵循以下代码

public class BatteryLevelReceiver extends BroadcastReceiver 
{

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show();
        Log.e("", "BATTERY LOW!!");
    }
}

我正在模拟器上运行该应用程序,并使用telnet更改电池电量。它会更改电池电量,但不显示任何 Toast 或日志。

我错过了什么?任何帮助是值得赞赏的!


答案 1

您可以在 中注册接收器,但请确保您正在筛选的操作是AndroidManifest.xml

android.intent.action.BATTERY_LOW

而不是

android.intent.action.ACTION_BATTERY_LOW

(您在代码中使用了它)。


答案 2

在代码中注册接收器,而不是在文件中注册。AndroidManifest

registerReceiver(batteryChangeReceiver, new IntentFilter(
    Intent.ACTION_BATTERY_CHANGED)); // register in activity or service

public class BatteryChangeReceiver extends 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);
    }
}

unregisterReceiver(batteryChangeReceiver);//unregister in the activity or service

或者用接收器收听电池电量。null

Intent BATTERYintent = this.registerReceiver(null, new IntentFilter(
        Intent.ACTION_BATTERY_CHANGED));
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
Log.v(null, "LEVEL" + level);

推荐