Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 广播接收器动作\u电源\u已连接_Android_Broadcastreceiver_Battery - Fatal编程技术网

Android 广播接收器动作\u电源\u已连接

Android 广播接收器动作\u电源\u已连接,android,broadcastreceiver,battery,Android,Broadcastreceiver,Battery,我一直在尝试实现最简单的事情,每次您将设备连接到电源时,都要敬酒 由于某种原因,每次我连接它时,应用程序都会崩溃。 因为我需要再次拔掉插头,我看不到logcat,所以我完全不明白为什么会发生这种情况 我的广播接收机类 public class ChargingOnReceiver extends BroadcastReceiver { private Activity activity; public ChargingOnReceiver(Activity activit

我一直在尝试实现最简单的事情,每次您将设备连接到电源时,都要敬酒

由于某种原因,每次我连接它时,应用程序都会崩溃。 因为我需要再次拔掉插头,我看不到logcat,所以我完全不明白为什么会发生这种情况

我的广播接收机类

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;}代码