Mag*_*ahn 6 android battery broadcastreceiver
我目前正在做一个可靠的方式来确定具体的充电器类型,在我的情况下,音乐码头像这样.问题是,这个停靠站在停靠时不会发送停靠事件.
因为我正在制作一个应用程序,依赖于能够确定设备何时停靠或取消停靠.因此,我需要一种过滤和分离这些事件的方法:
我注意到我的设备(LG optimus 4x HD)设法对这些操作中的每一个做出不同的反应.当它连接到标准充电器时,它不会发出通知消息,当它连接到计算机时它告诉我USB模式已被激活,当它连接到底座时,它给我一个慢的充电器警告.
我需要建立一个具有相同能力的系统来分离这些动作并对它们作出反应.到目前为止,我只制作了一个简单的BroadcastReceiver,如果设备连接或未连接到充电器,它会做出反应.我还设法使用文档中的代码监控充电状态.
有没有办法确定这个特定的充电器输入?
每当设备对接或断开对接时,都会广播 ACTION_DOCK_EVENT 操作。要监视设备停靠状态的变化,只需在应用程序清单中注册广播接收器,如下面的代码片段所示:
<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>
Run Code Online (Sandbox Code Playgroud)
如果设备已对接,则可以将其对接在四种不同类型的对接坞中的任何一种中:
停靠状态详细信息作为额外内容包含在 ACTION_DOCK_EVENT 操作的粘性广播中。因为它是粘性的,所以你不需要注册BroadcastReceiver。您可以简单地调用 registerReceiver() 并传入 null 作为广播接收器,如下一个代码片段所示。
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);
Run Code Online (Sandbox Code Playgroud)
您可以从 EXTRA_DOCK_STATE 额外中提取当前的对接状态:
int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式找到停靠状态
boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK ||
dockState == EXTRA_DOCK_STATE_LE_DESK ||
dockState == EXTRA_DOCK_STATE_HE_DESK;
Run Code Online (Sandbox Code Playgroud)
编辑 :
如果您的应用程序仍然没有收到广播,请尝试使用此代码发送手动广播并检查代码:
adb shell am broadcast -a android.intent.action.POWER_CONNECTED -n com.jm.monitoringbatterydemo/.PowerConnectionReceiver
Run Code Online (Sandbox Code Playgroud)
更改广播名称和接收器。
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |