我是一个新的android .I我得到一个运行时异常说“错误接收广播意图ACTION_POWER_DISCONNECTED ".I在我的活动的onCreate()中实例化我的接收器,然后我在onResume()中注册我的接收器,并在onPause()方法中取消注册它。实际上我想根据我的应用的收费模式来设置文本收费和不收费
package com.example.mrfrag.firebattery;
import android.content.BroadcastReceiver;
import android.content.ContentProvider;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class HomeActivity extends AppCompatActivity{
TextView batteryplus,temp,setting,plug,charging,battery;
private BroadcastReceiver mReceiver;
IntentFilter ifilter =new IntentFilter();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
batteryplus= findViewById(R.id.batteryplus);
temp = findViewById(R.id.temp);
setting= findViewById(R.id.setting);
plug= findViewById(R.id.plug);
charging= findViewById(R.id.charging);
battery= findViewById(R.id.battery);
mReceiver=new PowerConnectionReceiver();
ifilter.addAction(Intent.ACTION_POWER_CONNECTED);
ifilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
ifilter.addAction(Intent.ACTION_BATTERY_CHANGED);
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(mReceiver, ifilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
public class PowerConnectionReceiver extends BroadcastReceiver {
public PowerConnectionReceiver(){
}
@Override
public void onReceive(Context context, Intent batteryStatus) {
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS,
-1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING
||
status == BatteryManager.BATTERY_STATUS_FULL;
if (isCharging) {
plug.setText("CHARGING");
} else {
plug.setText("NOT CHARGING");
}
int health =
batteryStatus.getIntExtra(BatteryManager.EXTRA_HEALTH,0);
batteryplus.setText(ConvoHealth(health));
String technology =
batteryStatus.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
setting.setText(technology);
float tpr = ((float)
batteryStatus.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0)) / 10.0f;
temp.setText( String.valueOf(tpr) + "°C / " +
String.valueOf(tpr*1.8+32)+"F"+"\n");
int voltage =
batteryStatus.getIntExtra(BatteryManager.EXTRA_VOLTAGE,0);
charging.setText(voltage+ " mV");
int mah = batteryStatus.getIntExtra(String.valueOf
(BatteryManager.BATTERY_PROPERTY_CAPACITY),0);
battery.setText(mah+ " Mah");
}
}
private String ConvoHealth(int health){
String result;
switch(health){
case BatteryManager.BATTERY_HEALTH_COLD:
result = "COLD";
break;
case BatteryManager.BATTERY_HEALTH_DEAD:
result = "DEAD";
break;
case BatteryManager.BATTERY_HEALTH_GOOD:
result = "GOOD";
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
result = "OVERHEAT";
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
result = "OVER VOLTAGE";
break;
case BatteryManager.BATTERY_HEALTH_UNKNOWN:
result = "UNKNOWN";
break;
case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
result = "UNSPECIFIED_FAILURE";
break;
default:
result = "Unknown";
}
return result;
}
}发布于 2018-06-25 09:10:05
出现此异常的原因是因为下面这行代码:
String technology =
batteryStatus.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
setting.setText(technology);上面这行抛出了空指针。此额外功能仅适用于Intent.ACTION_BATTERY_CHANGED。因此要么将其删除,要么添加条件
if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
String technology =
batteryStatus.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
setting.setText(technology);
setting.setText(technology);
}https://stackoverflow.com/questions/51012188
复制相似问题