java - 为什么我的低电量警报代码不起作用?
问题描述
我尝试发出低电量警报,但我的代码不起作用它总是显示Toast
所有级别的按摩,即使我设置< 30
了一些可能丢失或我的代码错误?Toast
即使我设置了,当我点击屏幕时也会消失toast.setDuration(Toast.LENGTH_LONG);
?
public void onReceive(Context context, Intent intent) {
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int lowLevel = intent.getIntExtra("Level", 0);
float percentage = level/ (float) scale;
mProgressStatus = (int)((percentage)*100);
mViewPercentage.setText("" + mProgressStatus + "%");
mProgressBar.setProgress(mProgressStatus);
if (lowLevel < 30){
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.lowbattery_toast, (ViewGroup) findViewById(R.id.low_battery));
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM, 0, 10);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
}
有什么想法可以解决我的问题吗?
解决方案
我猜您正在尝试发出低电量警报,并在电池电量低于 30% 时显示 Toast。
您的进度条应该可以正常工作,但是在BatteryManager的文档中您可以看到常量BatteryManager.EXTRA_LEVEL等于“级别”而不是“级别”,因此您的代码没有获得正确的值。
为了让 Toast 工作,您必须修改以下行:
int lowLevel = intent.getIntExtra("Level", 0);
有了这个
int lowLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
(更新)
这样,每当您的电池电量低于阈值时(例如,当它是 29、28、27...)时,都会显示 Toast。要修复它,一个简单的方法是这样的:
private static int previousLevel = 100;
public void onReceive(Context context, Intent intent) {
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int lowLevel = intent.getIntExtra("Level", 0);
float percentage = level/ (float) scale;
mProgressStatus = (int)((percentage)*100);
mViewPercentage.setText("" + mProgressStatus + "%");
mProgressBar.setProgress(mProgressStatus);
if (lowLevel < 30 && previousLevel >= 30){
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.lowbattery_toast, (ViewGroup) findViewById(R.id.low_battery));
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM, 0, 10);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
previousLevel = lowLevel;
}
推荐阅读
- asp.net-core - Linux Ubuntu 上生产中的 Microsoft.Extensions.Logging.Log4Net 问题
- javascript - 如何在平面列表中仅渲染一次特定元素 - React Native
- java - 从 jmeter 中的 JSON 请求有效负载生成 HMAC sha256
- java - 基于元素的最长公共前缀
- javascript - React Native 将 ref 传递给用 HOC 包装的功能组件
- javascript - 使用 Webgl 创建三角形的随机位置
- xml - 使用 XSD 验证一个元素或其他元素或两者
- visual-foxpro - 为什么这个 IF FOUND 的条件总是为真?
- python - 公共用户配置文件的 Django 信誉/类似系统 - 错误 404
- c++ - 如果太长,QLabel “中断”字