android – 使用EXTRA_PLUGGED获取usb电缆插入INOUT事件不起作用

android – 使用EXTRA_PLUGGED获取usb电缆插入INOUT事件不起作用,第1张

概述我的目的是保存在首选项 Android设备USB /电源线的首选状态:已连接/已断开连接.从开发人员站点我看到有两个Intent用于获取该状态:ACTION_POWER_CONNECTED / DISCONNECTED.所以我使用了与开发人员发布的代码相同的代码: http://developer.android.com/training/monitoring-device-state/batte 我的目的是保存在首选项 Android设备USB /电源线的首选状态:已连接/已断开连接.从开发人员站点我看到有两个Intent用于获取该状态:ACTION_POWER_CONNECTED / disCONNECTED.所以我使用了与开发人员发布的代码相同的代码:

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

在监控充电状态的变化部分.

表现

<receiver androID:name=".PowerConnectionReceiver">  <intent-filter>    <action androID:name="androID.intent.action.ACTION_POWER_CONNECTED"/>    <action androID:name="androID.intent.action.ACTION_POWER_disCONNECTED"/>  </intent-filter></receiver>

Java代码

public class PowerConnectionReceiver extends broadcastReceiver {    @OverrIDe    public voID onReceive(Context context,Intent intent) {         int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1);        boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;        boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;        Toast.makeText(context,"pvr = " + usbCharge + "," + acCharge + "," + isCharging,Toast.LENGTH_SHORT).show();    }}

当我插入USB电缆IN / OUT时,广播总是正确地发送并在PowerConnectionReceiver中捕获但总是具有相同的结果(=电缆已拔出).

我用galaxy Nexus 4.1.1 / 4.2.1测试了它 – 我总是在Toast中获得2xFALSE(chargePlug = FALSE,usbCharge = FALSE).

为什么intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1)总是返回默认值“-1”?

谢谢.

PS.如果我在Java中注册接收器,一切正常

Intent intent = context.registerReceiver(null,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

……在服务或活动中.但根据AndroID开发者网站的说法,上面的代码返回正确值并不是先决条件;

解决方法 我正在处理同样的问题,遇到你的帖子.我认为问题在于,您提供链接的AndroID培训页面中的代码是错误的.

ACTION_POWER_CONNECTED和ACTION_POWER_disCONNECTED不会“携带”您从代码中的intent中查询的数据.我无法在我的设备上使用相同的东西(运行AndroID 4.3的第一代Nexus 7和运行AndroID 2.3.6的Nexus One),并且因为它似乎无法在任何地方工作,我来到“坏代码”结论.

我用以下代码修复它.它实际上非常接近你提供的修复程序,除了它直接进入我的broadcastReceiver而不进入活动.在上面的代码中,这里的代码片段将在“int chargePlug”开头的行之前.之后,在同一行(您的行)中更改“intent”,从“int chargePlug”开始,更改为“mIntent”.

final Intent mIntent = context.getApplicationContext().registerReceiver(null,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

请注意,您的broadcastReceiver现在有两个意图.一个传递给它,它将包含动作ACTION_POWER_CONNECTED(或ACTION_POWER_disCONNECTED),另一个传递在broadcastReceiver中明确地提取电池信息.

如果您将其放入活动(它不会连接到您的broadcastReceiver),由于参数列表中的null,我提供的代码片段将无法工作.您实际上并没有使用该null注册broadcastReceiver.由于ACTION_BATTERY_CHANGED通知可以触发A LOT,因此将null更改为broadcastReceiver也不理想.我非常有信心ACTION_BATTERY_CHANGED并不打算用作broadcastReceiver的触发器.相反,我认为这意味着要实时使用以获得有关电池信息更改信息的最后“粘性”广播(在AndroID文档中查找“粘性广播”).

另请注意,我给出的代码片段在调用链中包含“getApplicationContext()”.拿出来,Gingerbread设备会崩溃(感谢CommonsWare).

总结

以上是内存溢出为你收集整理的android – 使用EXTRA_PLUGGED获取usb电缆插入IN / OUT事件不起作用全部内容,希望文章能够帮你解决android – 使用EXTRA_PLUGGED获取usb电缆插入IN / OUT事件不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1149024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存