处理码头状态变化

时间:2013-10-19 11:17:35

标签: android android-intent broadcastreceiver intentfilter

我的目标是创建一个对停靠状态更改做出反应的应用。基于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之前,接收器必须在每次重新启动后再次注册。

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”

希望这有帮助。