【问题标题】:Can't receive broadcast Intent of UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED无法接收 UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED 的广播 Intent
【发布时间】:2013-08-03 15:37:33
【问题描述】:

我最近正在编写一个USB主机App,但是因为无法检测到设备连接/分离事件而卡住了,我按照http://developer.android.com/guide/topics/connectivity/usb/host.html的编码说明并参考了网络中其他人的编码,经过多次检查,我还是找不到问题。经过我的调试,似乎 UsbManager.ACTION_USB_DEVICE_ATTACHED/UsbManager.ACTION_USB_DEVICE_DETACHED 意图没有发生,因为我尝试使用 Context.sendBroadcast() 发送自定义的 Intent,而我的 BroadcastReceiver 可以接收到该意图。但是当我连接/分离 USB 设备时,BroadcastReceiver 不运行。我使用的手机是HTC One-X,我确信OTG功能是正确的,因为鼠标功能很好。 这是我的代码片段。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.launcher);
    mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
    if(mUsbManager == null) {
        Log.d(TAG, "mUsbManager is null");
    }

    // listen for new devices
    IntentFilter filter = new IntentFilter();
    filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
  // filter.addAction("MyTest");
    registerReceiver(mUsbReceiver, filter);

}

广播接收器

BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "mUsbReceiver.onReceive start");
        String action = intent.getAction();
        UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
            setDevice(device);
        } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            if (mDevice != null && mDevice.equals(device)) {
                setDevice(null);
            }
        }
    }
};

清单.xml

<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-sdk android:minSdkVersion="12" />

<application>
    <activity android:name=".USBActivity"
        android:label="USBActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    <!--     <receiver android:name=".mUsbReceiver"> -->

        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        </intent-filter>

        <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
            android:resource="@xml/device_filter" />
        <meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
            android:resource="@xml/device_filter" />
   <!--     </receiver> -->

        </activity>
</application>

res/xml中的device_filter,3个设置都试过了,没用:

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
  <!-- iCooby mouse -->
  <!--     <usb-device vendor-id="15d9" , /> -->
  <!--     <usb-device vendor-id="5593" product-id="2637"/> -->
    <usb-device />
 </resources>

如果有人知道发生了什么?或者告诉我如何检测广播意图是否处于活动状态,非常感谢。

【问题讨论】:

标签: android usb broadcastreceiver host intentfilter


【解决方案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 ...
        }

那么您也不需要在onCreate() 中调用registerReceiver()。还请记住,意图过滤器中的 ID 是十进制的。因此,您必须转换命令行工具(如“lsusb”)提供的值。

【讨论】:

  • 谢谢!解决了我的问题
【解决方案2】:

receiver 标签被注释掉了,我猜你知道,但只是以防万一。它也应该被声明为&lt;receiver android:name="mUsbReceiver"&gt;你的有一个'。'不需要在那里

【讨论】:

    猜你喜欢
    • 2021-02-15
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多