Android 广播接收器动作\u电源\u已连接
我一直在尝试实现最简单的事情,每次您将设备连接到电源时,都要敬酒 由于某种原因,每次我连接它时,应用程序都会崩溃。 因为我需要再次拔掉插头,我看不到logcat,所以我完全不明白为什么会发生这种情况 我的广播接收机类Android 广播接收器动作\u电源\u已连接,android,broadcastreceiver,battery,Android,Broadcastreceiver,Battery,我一直在尝试实现最简单的事情,每次您将设备连接到电源时,都要敬酒 由于某种原因,每次我连接它时,应用程序都会崩溃。 因为我需要再次拔掉插头,我看不到logcat,所以我完全不明白为什么会发生这种情况 我的广播接收机类 public class ChargingOnReceiver extends BroadcastReceiver { private Activity activity; public ChargingOnReceiver(Activity activit
public class ChargingOnReceiver extends BroadcastReceiver {
private Activity activity;
public ChargingOnReceiver(Activity activity){
this.activity = activity;
}
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
if(isCharging){
if(usbCharge){
Toast.makeText(activity, "Your battery are now Charging Via USB" , Toast.LENGTH_SHORT).show();
}else{
if(acCharge){
Toast.makeText(activity, "Your battery are now Charging Via AC Plug" , Toast.LENGTH_SHORT).show();
}
}
}
}
}
我的主要活动
private ChargingOnReceiver battery;
protected void onDestroy() {
unregisterReceiver(battery);
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PreferenceManager.setDefaultValues(this,R.xml.search_settings_screen,false);
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
this.registerReceiver(battery, ifilter);
}
我的舱单
<receiver android:name=".ChargingOnReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
我是按照这里说的那样工作的:
您不需要传递活动对象。 onReceive具有所需的上下文使用,并且将显示toast
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING
|| status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
System.out.println("isCharging:" + isCharging);
System.out.println("chargePlugType:" + chargePlug);
if (isCharging) {
if (usbCharge) {
Toast.makeText(context, "Your battery are now Charging Via USB",
Toast.LENGTH_SHORT).show();
} else {
if (acCharge) {
Toast.makeText(context,
"Your battery are now Charging Via AC Plug",
Toast.LENGTH_SHORT).show();
}
}
}
}
我看不到logcat logcat写入相当长的循环缓冲区。您没有理由无法查看日志。logcat不会显示任何日志,无论是连接电源还是断开电源。但是看不到logcat是可以理解的,问题是在清单中声明接收者的代码的某个地方,因此该接收者中的活动为null。使用context参数显示在活动中注册的toast是多余的。选择了一种注册方法并坚持使用它可能是一个最终不会显示toast的问题,但由于我将toast更改为上下文,它仍然会折叠,我想这不是问题所在:\n在删除接收器上的活动构造函数后,它设法不折叠,thx alot!但是吐司仍然没有显示出来,有什么想法吗?我确实做到了,谢谢你,应用程序不再崩溃,但是当我插入设备时,吐司不会出现。有什么想法吗?我怀疑这可能是我注册接收器的方式,我将原始的主要活动更改为此IntentFilter ifilter=新IntentFilterIntent.ACTION\u BATTERY\u changed;此注册表接收电池,ifilter@莎朗古,我认为你错过了创造电池的目标。代码专用PowerConnectionReceiver电池=新的PowerConnectionReceiver;@Override protected void onCreateBundle savedInstanceState{super.onCreatesavedInstanceState;setContentViewR.layout.activity_main;IntentFilter ifilter=new intentFilterinent.ACTION_BATTERY_已更改;this.registerReceiveBattery,ifilter;}代码