Java 为什么我的电池电量不足警报代码没有';不行?

Java 为什么我的电池电量不足警报代码没有';不行?,java,android,Java,Android,我尝试发出电池电量不足警报,但我的代码不起作用。即使我设置了

我尝试发出电池电量不足警报,但我的代码不起作用。即使我设置了
<30
可能有人认为代码缺失或我的代码错误,它也总是在所有级别上显示
Toast
按摩?而且当我点击屏幕时,
Toast
将消失,即使我设置了
Toast.setDuration(Toast.LENGTH\u LONG)

public void onReceive(上下文、意图){
int scale=intent.getIntExtra(BatteryManager.EXTRA_scale,-1);
int level=intent.getIntExtra(BatteryManager.EXTRA_level,-1);
int lowLevel=intent.getIntExtra(“级别”,0);
浮动百分比=水平/(浮动)刻度;
mProgressStatus=(整数)(百分比)*100);
mViewPercentage.setText(“+mProgressStatus+“%”);
mProgressBar.setProgress(mProgressStatus);
if(低电平<30){
LayoutInflater充气机=getLayoutInflater();
视图布局=充气机。充气(R.layout.lowbattery_toast,(视图组)findViewById(R.id.low_battery));
Toast Toast=新Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM,0,10);
toast.setDuration(toast.LENGTH\u LONG);
toast.setView(布局);
toast.show();
}
}

有什么办法解决我的问题吗?

我想你是想发出电池电量不足警报,并在电池电量低于30%时敬酒

进度条应该可以正常工作,但在的文档中可以看到常量BatteryManager.EXTRA_LEVEL等于'LEVEL'而不是'LEVEL',因此代码没有得到正确的值

要使祝酒词生效,必须修改以下行:

 int lowLevel = intent.getIntExtra("Level", 0);
用这个

 int lowLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
(更新)

这样,每次电池电量低于阈值时(例如,当电池电量为29、28、27…)都会显示烤面包片。要解决此问题,一个简单的方法如下:

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;
        }
private static int previousLevel=100;
公共void onReceive(上下文、意图){
int scale=intent.getIntExtra(BatteryManager.EXTRA_scale,-1);
int level=intent.getIntExtra(BatteryManager.EXTRA_level,-1);
int lowLevel=intent.getIntExtra(“级别”,0);
浮动百分比=水平/(浮动)刻度;
mProgressStatus=(整数)(百分比)*100);
mViewPercentage.setText(“+mProgressStatus+“%”);
mProgressBar.setProgress(mProgressStatus);
如果(低电平<30和上一电平>=30){
LayoutInflater充气机=getLayoutInflater();
视图布局=充气机。充气(R.layout.lowbattery_toast,(视图组)findViewById(R.id.low_battery));
Toast Toast=新Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM,0,10);
toast.setDuration(toast.LENGTH\u LONG);
toast.setView(布局);
toast.show();
}
前一级=低级;
}

总而言之,为

动作\u电池\u更换

intent是动态设置的,因为它不能通过清单中声明的组件接收,只能通过向显式注册来接收

Context.registerReceiver()


当到达IF时,lowLevel的值是多少?是0吗?如果(低电平<30&&lowLevel>0)
@Raskilas我已经尝试过了,但仍然没有工作
Toast
在电平达到设定值时没有显示
Toast
当电池达到设定的某个电平时总是显示。exp.i将电池电量设置为=30当电池电量达到该电量时,
Toast
始终重复显示,直到电量在该电量下发生变化level@ForceGaming您应该保留一个变量,例如静态变量或存储在SharedReferences中的变量,以了解Toast是否已显示。当电池电量首次低于阈值时,必须将其设置为true,当电池电量首次高于阈值时,必须将其设置为false。我编辑了已接受的答案以将其包括在内,希望有帮助:)
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;
        }
public class Main extends Activity { private TextView batteryTxt; private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context ctxt, Intent intent) { int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); batteryTxt.setText(String.valueOf(level) + "%"); } }; @Override public void onCreate(Bundle b) { super.onCreate(b); setContentView(R.layout.main); batteryTxt = (TextView) this.findViewById(R.id.batteryTxt); this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } }