首页 > 解决方案 > 如何在android studio中检查电池电量

问题描述

我从来没有做过任何与电池有关的事情。所以,我对它完全陌生。我的应用程序中有一个广播,我通过它接收和发送消息并执行特定任务。现在我的任务之一是检查电池电量是否低于 20% 或 15%,执行一些任务。我不知道如何将该检查 :( 在我的广播文件中。提前感谢您的帮助:)。

更新我的问题:到目前为止我已经做到了

public class BatteryBroadcastReceiver extends BroadcastReceiver {

DatabaseHelper db;

@Override
public void onReceive(Context context, Intent intent) {

    db = new DatabaseHelper(context);
    String cont1 = db.usercontact().toString();

    String action = intent.getAction();
    if (action != null && action.equals(Intent.ACTION_BATTERY_CHANGED)) {

        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);
        int percentage = level * 100 / scale;

        if(percentage <=  20){
           // doing something like getting location
        }
    }
}

我已经在活动中注册了我的广播:

public class Battery extends AppCompatActivity {

private BatteryBroadcastReceiver batteryReceiver = new BatteryBroadcastReceiver();
private IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_auto_location);


}

@Override
protected void onResume(){
    super.onResume();
    registerReceiver(batteryReceiver,intentFilter);
}

@Override
protected void onPause(){
    unregisterReceiver(batteryReceiver);
    super.onPause();
}

}

这段通用代码工作正常,但它限制了我只能进行此活动(可能是因为在此活动中注册了广播)。就像只要此活动保持打开状态,我就可以执行某些任务,但是当我关闭它时,当电池电量不足时,它不会执行任何任务。现在我不知道该怎么办。我的应用程序中还有其他活动,即使我不在此活动中,我也希望它能够工作。可能吗 ?

标签: androidbatterylevel

解决方案


查看此文档以获取一些信息: https ://developer.android.com/training/monitoring-device-state/battery-monitoring

页面中可能对您有所帮助的部分:

" 您无法轻松地持续监控电池状态,但您不需要这样做。

一般来说,持续监控电池电量对电池的影响比应用程序的正常行为更大,因此最好只监控电池电量的显着变化——特别是当设备进入或退出低电量状态时。

下面的清单片段是从广播接收器中的意图过滤器元素中提取的。每当设备电池​​电量变低或通过侦听 ACTION_BATTERY_LOW 和 ACTION_BATTERY_OKAY 退出低电量状态时,都会触发接收器。

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

"

更新:尝试在广播文件中使用以下代码:

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;

推荐阅读