2013-10-19 26 views
0

我的目标是制作一个应对码头状态变化的应用程序。基于documentation这应该是一个相当容易的任务,因为ACTION_DOCK_EVENT是一个粘性广播,因此不需要BroadcastReceiver。处理码头状态变化

问题是,我没有设法使它“做某事”,如发布简单的日志消息或显示敬酒。我已经与例如fiddeling各地从文档页​​面:

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

当使用这个Eclipse的告诉我的意图是dockStaus我unused.I试图从我的应用程序类执行该代码,自前的Android 3.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额外的当前状态对接:

 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”

希望这有助于您。