2013-10-10 47 views
1

我正在嘗試與廣播接收器,讓我的設備連接到USB或汽車碼頭,但沒有得到正確的結果。 請幫忙? 在此先感謝。 接收器的代碼是:如何檢測我的Android設備通過廣播接收器與USB或車載底座連接?

public class CarDockReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Car Dock Receiver registerd", Toast.LENGTH_SHORT).show(); 
     switch (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)) { 
     case BatteryManager.BATTERY_PLUGGED_AC: 
      Toast.makeText(context, "Battery plugged AC", Toast.LENGTH_SHORT).show(); 
      break; 
     case BatteryManager.BATTERY_PLUGGED_USB: 
      Toast.makeText(context, "Battery plugged USB", Toast.LENGTH_SHORT).show(); 
      break; 
     default: 
      break; 
     } 
    } 
} 

接收清單文件是:

<receiver 
    android:name=".CarDockReceiver" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> 
     <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> 
    </intent-filter> 
</receiver> 
+0

你嘗試過什麼嗎? – Vigbyor

+0

我試圖按照說明配件模式的android頁面(http://developer.android.com/guide/topics/connectivity/usb/accessory.html)。 – Viky

回答

0

要檢查您的設備是否連接到USB附件,您可以使用此意圖。

<activity ...> 
    ... 
    <intent-filter> 
     <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> 
    </intent-filter> 

    <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" 
    android:resource="@xml/accessory_filter" /> 
</activity> 

參考:http://developer.android.com/guide/topics/connectivity/usb/accessory.html

如果你只是檢測USB連接,然後就用這些意圖對你的意圖過濾器:UsbManager.ACTION_USB_DEVICE_ATTACHED和UsbManager.ACTION_USB_DEVICE_DETACHED

希望這有助於。

UPDATE:

如果你正在處理提供動力配件,您還可以檢測使用這種意圖的連接:ACTION_POWER_CONNECTED。當外部電源連接到設備時,此意圖被廣播。這是一個示例代碼。

在AndroidManifest.xml中

<receiver android:name=".YourReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> 
     <action android:name="android.intent.action.BATTERY_CHANGED" /> 
    </intent-filter> 
</receiver> 

和你receiver.java來源:

public class YourReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("connection", "power connected"); 
    } 
} 
+0

請您提供任何示例或鏈接? – Viky

+0

我剛更新了我的答案。我在我的設備上測試了ACTION_POWER_CONNECTED意圖,並且可以檢測到與我的電腦的連接。這隻適用於處理電源的USB類型。 – SLee

+0

是的,我試過這個,即使我的curser進入onReceive方法,但無法獲得Intent數據,如Toast.makeText(上下文,「Receiver registerd」,Toast.LENGTH_SHORT).show();電池管理器.BATTERY_PLUGGED_AC: Toast.makeText(上下文,「電池插入AC」,Toast.LENGTH_SHORT).show();開關(intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1)){ 休息;電池管理器.BATTERY_PLUGGED_USB: Toast.makeText(上下文,「Battery plugged USB」,Toast.LENGTH_SHORT).show(); break; default:break;基本上我想要Car dock相關數據如果我將設備連接到汽車底座。 – Viky

1

只是解決了類似的問題,檢測USB設備的插入。事實證明, - 因爲你指定在清單的意圖過濾器 - Android的東西插入調用的onResume你可以嘗試添加此:

@Override 
protected void onResume() { 
    super.onResume(); 

    Intent intent = getIntent(); 
    if (intent != null) { 
     Log.d("onResume", "intent: " + intent.toString()); 
     if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { 
      // Do your thing ... 
     } 

運行它,看看究竟是什麼記錄,並使用這些信息。檢查檢查的正確操作(在上面的示例中,替換ACTION_USB_DEVICE_ATTACHED)。

+0

這很有趣。我在我的主要活動中嘗試了這一點。它確實被觸發,但始終返回「啓動器」作爲意圖,即使在由於連接了USB設備而被觸發時。 – user401183