BroadCast接收器电池状态错误

时间:2015-01-28 18:23:19

标签: java android eclipse

我试图在我的项目中使用广播接收器,该接收器收听充电/不充电的电池状态并在每个选项中抛出祝酒词。 每次我在应用程序中更改充电器状态时,应用程序崩溃。 (如果我连接充电器启动应用程序,它会告诉我正确的吐司 但当我给手机充电时应用程序崩溃了) 这是代码 提前谢谢

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = this.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

    if(isCharging==true){

        Toast.makeText(this, "Charging", Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(this, "Charger not connected", Toast.LENGTH_SHORT).show();

UPDATE 我很难理解我的想法。 我很新,所以要耐心等待我:)

这是我制作的代码

    public class MainActivity extends Activity  {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            checkBatteryState(null);


        public void checkBatteryState(View sender) {
            IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
            Intent batteryStatus = registerReceiver(null, filter);

            int chargeState = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
            String strState;

            switch (chargeState) {
                case BatteryManager.BATTERY_STATUS_CHARGING:
                case BatteryManager.BATTERY_STATUS_FULL:
                    strState = "charging";
                    Toast.makeText(this, strState, Toast.LENGTH_LONG).show();
                    break;
                default:
                    strState = "not charging";
                    Toast.makeText(this, strState, Toast.LENGTH_LONG).show();
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html

这是你正在使用的吗?

也许你还没有确保你的意图是粘性的。

我的建议是不要使用带有null参数的registerreceiver。

尝试使用此方法创建广播接收器: How to send data to another app which is not started

将你的Toasts放在onReceive()函数中。

答案 1 :(得分:0)

代码实际上并没有注册接收器,只是获得了粘性广播。如果从未发送广播,则返回null将导致剩余代码中的NPE。