【问题标题】:Receive intent ACTION_USB_DEVICE_ATTACHED through code通过代码接收意图 ACTION_USB_DEVICE_ATTACHED
【发布时间】:2012-06-26 20:32:46
【问题描述】:

我在使用 USB api 时遇到了麻烦。我正在尝试使用广播接收器来接收意图 ACTION_USB_DEVICE_ATTACHED 但它不会。

澄清一下,我通过清单很好地完成了这项工作,但它创建了一个新活动(并添加到了后台堆栈)。我发现这是不可取的,尤其是考虑到我的应用程序(终端)的性质。

我的猜测是设备过滤器 xml 元数据需要添加到意图过滤器,但我不知道如何。

欢迎任何反馈!

编辑 - 一些代码。 这是清单中多汁的部分。请注意,意图过滤器已被注释掉,以便动态注册的 BroadcastReceiver 获取意图(我假设您必须这样做)。

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

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

这是连接我的接收器的代码

//register for attachment
IntentFilter attachedFilter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
registerReceiver(mUsbAttachedReceiver, attachedFilter);

这是广播接收器声明

private final BroadcastReceiver mUsbAttachedReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
    {
        //BREAKPOINT HERE IS NEVER HIT
        String action = intent.getAction();
        showDebugToast(action);

        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
            synchronized(this)
            {
                UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                if (device != null){
                    getDevicePermission(device);
                }
            }
        }
    }
};

我避免在清单中声明接收器,因为我不完全确定在那里使用的做法(接收器与任何活动分开存在)。我是否认为只要应用程序正在运行,接收器就会运行,或者即使在清单中声明它也只是前台?任何有关这方面的文献都值得赞赏。

此后,我通过为活动提供“singleTop”启动模式并实现 onNewIntent() 来绕过这个问题。这给了我想要的行为,同时还允许在没有运行活动的情况下启动(使用清单)。这是我的最终目标。但是,我真的很想了解这种行为并对解决方案保持高度兴趣!

进一步编辑:我的调试设备是三星 Galaxy S3。我没有换过ROM。

【问题讨论】:

标签: android android-intent usb


【解决方案1】:

是的,您需要使用 Activity 添加元数据:

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

accessory_filter:

<resources>
    <usb-accessory manufacturer="Acme, Inc" model="Whiz Banger" version="7.0" />
</resources>

查看此 Android 开发者博客 A Bright Idea: Android Open Accessories

【讨论】:

  • 我应该更清楚。我已经添加了元数据部分,但不确定是否需要以编程方式将其添加到过滤器中。
  • 嗨,伊姆兰。感谢您的链接。注册和接收看起来与我上面发布的代码示例非常相似。似乎这是行人的东西,但我显然错过了一些东西。
猜你喜欢
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
相关资源
最近更新 更多