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