Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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_Android Intent_Broadcastreceiver - Fatal编程技术网

Android 动作\u电源\u已连接并非有意发送

Android 动作\u电源\u已连接并非有意发送,android,android-intent,broadcastreceiver,Android,Android Intent,Broadcastreceiver,在我的应用程序中,我想检查手机是通过插座还是usb充电。为此,我使用以下代码创建了一个BroadcastReceiver: 清单: <receiver android:name=".ChargingReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.intent.act

在我的应用程序中,我想检查手机是通过插座还是usb充电。为此,我使用以下代码创建了一个
BroadcastReceiver

清单:

<receiver
    android:name=".ChargingReceiver"
    android:enabled="true" android:exported="false">

    <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
    </intent-filter>
</receiver>
我的问题是,
ChargingReceiver
的第一行总是返回
-1
,这是我设置的默认值。当我插上或拔下手机时,广播接收器被正确调用,因此在我看来,该意图并不包含我试图查找的
额外
。我有来自的代码,所以它应该可以工作

我也找到了答案,但这对我并没有帮助,因为我必须区分USB充电和插座充电。你知道我做错了什么吗?顺便说一句,我已经用Android牛轧糖测试了代码。我认为棒棒糖是有效的,但我不完全确定…

试试这个

        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;

按照@MarkB的建议,您必须在清单中明确注册从您的Java代码更改的操作电池,您注册了
操作电源连接的
操作电源断开的
。但这些广播不包括充电状态的信息

为了接收有关充电状态的信息,您需要注册
动作\u电池\u更改
广播。从开发者文档:

BatteryManager会在一个广播中广播所有电池和充电详细信息 包括充电状态的粘性意图

因此,您可以在
onReceive
中尝试以下代码段:

Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean pluggedAC = (plugged == BatteryManager.BATTERY_PLUGGED_AC);
boolean pluggedUSB = (plugged == BatteryManager.BATTERY_PLUGGED_USB);

您可以阅读更多有关此方法的信息。

@MarkB方法是正确的,它与开发人员文档中建议的方法相同。我想指出,您不需要注册任何
广播接收器
,因为这是一个

基本上,您需要做的就是调用
registerReceiver
传入null作为接收方,当然还有操作(
Intent.action\u BATTERY\u CHANGED
):

然后你可以这样做:

// Are we charging / charged?

int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
(这些片段不是我的,而是来自文档的)

请注意,按照文档的建议,这样做没有什么错


现在,回到你的代码你实际上是在为
动作(电源)连接
动作(电源)断开(电源)连接(电源)
(电源)连接()和
动作(电源)断开(()(。这也不起作用。布尔放电的值是多少?它也总是返回
false
。您能告诉我您的状态值吗?它也总是
-1
。我发现了这个,所以我认为它总是返回
-1
是可以的。我只在舱单上登记广播接收者。但是
额外的
应该可以用…哇,这个可以用了,谢谢你!我认为这不是最好的解决方案,因为我用
Broadcast
Broadcast
做出反应,但由于我无法通过清单注册此
意图,这是目前为止我唯一可以使用的解决方案,或者你有什么想法来美化它吗?或者我有点小气?我认为在广播接收器中这样做是一个很好的解决方案,因为您只希望在电源连接状态发生变化时接收电池状态信息
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
// Are we charging / charged?

int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;