我目前正试图做出一种可靠的方式来确定一个特定的充电器类型,在我的情况下,一个音乐码头,如这。问题是,不幸的是,这个码头在停靠时不会发送一个dock事件。
因为我正在制作一个应用程序,它依赖于能够确定设备何时被停靠或卸载。因此,我需要一种过滤和分离这些事件的方法:
我已经注意到,我的设备(LG擎天柱4x HD)设法处理不同的反应对每一个这些行动。当它连接到标准充电器时,它不会发出通知消息,当它连接到计算机时,它会告诉我USB模式已经激活,当它连接到码头时,它会给我一个缓慢的充电器警告。
我需要一个系统,有同样的能力分开这些行动,并对他们作出反应。到目前为止,我只做了一个简单的BroadcastReceiver,如果设备是连接或未连接到充电器反应。我还设法使用在文档中找到的代码监视充电状态。
有任何方法来确定这个特定的充电器输入吗?
发布于 2013-11-21 07:57:04
每当设备停靠或取消停靠时,都会广播ACTION_DOCK_EVENT操作。要监视设备的停靠状态中的更改,只需在应用程序清单中注册一个广播接收器,如下所示:
<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>如果一个设备被停靠,它可以停靠在四种不同类型的坞中的任何一种:
在ACTION_DOCK_EVENT操作的粘性广播中包含了停靠状态的详细信息。因为它很粘,所以不需要注册BroadcastReceiver。您只需调用registerReceiver()作为广播接收器传入null,如下一个片段所示。
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);您可以从额外的EXTRA_DOCK_STATE中提取当前的停靠状态:
int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;您可以通过以下方法找到码头状态
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;编辑:
如果您的应用程序仍未接收到广播,请尝试使用此代码发送手动广播并检查代码:
adb shell am broadcast -a android.intent.action.POWER_CONNECTED -n com.jm.monitoringbatterydemo/.PowerConnectionReceiver更改广播和接收器的名称。
发布于 2013-11-27 08:46:06
要解决这个问题,你可以做的就是看看手机上剩下的电量的百分比。然后,您可以确定该值正在上升,这意味着它已停靠。唯一的问题可能是,如果你有时充电在一个常规的充电器,而不是一个码头,你仍然会让它的反应,就像它是一个。
更多关于读取电池级别等的信息:http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
发布于 2013-11-27 13:10:32
它是否有助于识别电源使用
int BATTERY_PLUGGED_AC Power source is an AC charger.
int BATTERY_PLUGGED_USB Power source is a USB port.
int BATTERY_PLUGGED_WIRELESS Power source is wireless.https://stackoverflow.com/questions/19868550
复制相似问题