如何检测我的Android设备是通过广播接收器与USB或汽车坞连接?

时间:2013-10-10 03:34:22

标签: android usb

我正在尝试使用广播接收器将我的设备连接到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>

2 个答案:

答案 0 :(得分:1)

刚刚解决了检测USB设备插入的类似问题。事实证明 - 因为您在清单中指定了一个intent过滤器 - 当插入某些内容时,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)。

答案 1 :(得分: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

希望这有帮助。

更新:

如果您正在处理提供电源的配件,您还可以使用此意图检测连接: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");
    }
}