android - 如何在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();
}
}
这段通用代码工作正常,但它限制了我只能进行此活动(可能是因为在此活动中注册了广播)。就像只要此活动保持打开状态,我就可以执行某些任务,但是当我关闭它时,当电池电量不足时,它不会执行任何任务。现在我不知道该怎么办。我的应用程序中还有其他活动,即使我不在此活动中,我也希望它能够工作。可能吗 ?
解决方案
查看此文档以获取一些信息: 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;
推荐阅读
- javascript - 有没有办法下载捕获的同时显示视觉和音频内容的 webM/mp4 视频?
- excel - 我得到一个#Name?运行宏时出错
- html - 部分出现在 html 中的正常流程之外
- mercurial - 分支上的新远程头?水银推送错误
- c# - Csv 文件被读入我的 ReadCsvFile 方法,但没有被传递到我解析它的位置(TinyCsvParser)
- java - 在 java 中使用元数据转换 JPEG 文件名
- php - 如何修复 Laravel/Lumen 应用程序中的“cURL 错误 6:无法解析主机”
- reactjs - Google API 与来自 `react-router` v3 的 `Link` 一起使用时似乎会导致某种错误
- unity3d - 漂浮在 RWTexture
根据 if 语句的哪一侧输出不一致的值 - redis - Redis Streams 如何处理耗尽所有可用内存的问题?