2013-10-19 55 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」

希望這有助於您。