我的目标是创建一个对停靠状态更改做出反应的应用。基于documentation,这应该是一项相当容易的任务,因为ACTION_DOCK_EVENT是一个粘性广播,因此不需要BroadcastReceiver。
问题在于我没有设法让它“做点什么”,例如发布简单的日志消息或显示祝酒词。我一直在使用文档页面中的示例:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);
使用此Eclipse时告诉我dockStaus的意图未使用。我正在尝试从我的Application类执行此代码,因为在Android 3.1之前,接收器必须在每次重新启动后再次注册。
答案 0 :(得分:1)
停靠状态详细信息作为额外信息包含在ACTION_DOCK_EVENT操作的粘性广播中。因为它很粘,所以您不需要注册BroadcastReceiver。您可以简单地调用registerReceiver()作为广播接收器传入null,如下一个片段所示。
mContext = getApplicationContext();
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = registerReceiver(null, ifilter);
您可以从额外的EXTRA_DOCK_STATE提取当前停靠状态:
int dockState = (dockStatus == null ?
Intent.EXTRA_DOCK_STATE_UNDOCKED :
dockStatus.getIntExtra(Intent.EXTRA_DOCK_STATE, -1));
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
boolean isCar = dockState == Intent.EXTRA_DOCK_STATE_CAR;
每当设备停靠或取消停靠时,都会广播ACTION_DOCK_EVENT操作。要监视设备的停靠状态的变化,只需在应用程序清单中注册广播接收器,如下面的代码段所示:action android:name =“android.intent.action.ACTION_DOCK_EVENT”
希望这有帮助。