首页 > 解决方案 > 为什么我的低电量警报代码不起作用?

问题描述

我尝试发出低电量警报,但我的代码不起作用它总是显示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();
            }
        }

有什么想法可以解决我的问题吗?

标签: javaandroid

解决方案


我猜您正在尝试发出低电量警报,并在电池电量低于 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;
        }

推荐阅读