0

我的目标是制作一个对停靠状态更改做出反应的应用程序。根据文档,这应该是一项相当容易的任务,因为ACTION_DOCK_EVENT是一个粘性广播,因此不需要 BroadcastReceiver。

问题是我无法让它“做某事”,比如发布简单的日志消息或显示祝酒词。我一直在摆弄文档页面中的示例:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);

当使用这个 Eclipse 告诉我意图 dockStaus 未使用。我正在尝试从我的应用程序类中执行此代码,因为在 Android 3.1 之前,每次重新启动后都必须重新注册接收器。

4

1 回答 1

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 extra 中提取当前的对接状态:

        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"

希望这可以帮助。

于 2014-03-01T16:07:29.977 回答