【问题标题】:how to put check on battery level in android studio如何在android studio中检查电池电量
【发布时间】:2019-11-02 17:20:47
【问题描述】:

我从未做过任何与电池有关的事情。所以,我对它完全陌生。我的应用程序中有一个广播,通过它我接收和发送消息并执行特定任务。现在我的任务之一是检查电池电量是否低于 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();
}

}

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

【问题讨论】:

    标签: android batterylevel


    【解决方案1】:

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

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

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

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

    下面的清单 sn-p 是从广播接收器中的意图过滤器元素中提取的。每当设备电池​​电量变低或通过侦听 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;
    

    【讨论】:

    • 这是我可以在清单中执行的操作。但是我看过很多与电池电量相关的视频,他们所做的只是在代码中注册广播而不是在清单中。我已经尝试了你所说的,但直到我在代码中注册它才起作用。有什么方法可以做到这一点而无需在代码中注册,因为这将我限制在我不想要的特定活动中。
    • 我已经更新了我的答案。很抱歉回复得太晚了,我希望这能解决您的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多