使用 <intent-filter> 时在真实设备上缺少 Intent
Missing Intent on real device when <intent-filter> is used
好的,这个问题已经在 SO 上被问过很多次了,但是 none 已经解决了我的问题。据我所知,通常大多数其他人都选择了 BroadcastReceiver
。
总之,正题。一旦 USB 设备连接到 phone,我的一个 Activity 应该从它读取数据。为了执行此操作,我根据 USB Host guide 在我的 AndroidManifest.xml
文件中创建了一个 intent-filter
,如下所示:
<activity
android:name=".activity.GetMeterDataActivity"
android:label="@string/title_activity_get_meter_data" >
<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" />
</activity>
这在我使用的模拟器中效果很好,我的 Activity
在连接设备时启动。但是,在真实设备上什么也没有发生。如果我改为按照指南中的建议注册 BradcastReceiver
作为替代解决方案,则会收到 Intent 并且我请求使用它的许可并且它有效。然而,我发现后来的解决方案不太简洁,因为你必须自己征求许可,并且真的更愿意在清单中只包含 <intent-filter>
。
尝试过:
- 我不在
device_filter.xml
中使用十六进制值。
- 阅读 SO 上我能找到但没有找到解决我的问题的所有相关帖子。
- 在预期的 Activity 和
MAIN
Activity 之间移动了 <intent-filter>
但没有成功。
- 在
onCreate()
和 onResume()
中记录了意图,没有或只是 android.intent.action.MAIN
任何指点将不胜感激。
编辑 1:
这似乎是升级到 Lollipop 后的 Sony 问题,设备突然被列入黑名单。我可以在我的日志中看到这一点。
09-16 21:23:07.272 860-1279/? W/ContextImpl? Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1346 com.android.server.usb.UsbSettingsManager.blacklistedDeviceAttached:757 com.android.server.usb.UsbHostManager.endUsbDeviceAdded:242 com.android.server.usb.UsbHostManager.monitorUsbHostBus:-2 com.android.server.usb.UsbHostManager.access[=12=]0:49
如果它确实被列入黑名单,我仍然可以通过 BraodcastReceiver
.
使用该设备,这有点奇怪
是索尼过滤了我想看的Intent。随着 Sony Xperia Z3 Compact 软件版本号 23.4.A.1.232 的更新,这不再是问题,我收到了 Intent。
好的,这个问题已经在 SO 上被问过很多次了,但是 none 已经解决了我的问题。据我所知,通常大多数其他人都选择了 BroadcastReceiver
。
总之,正题。一旦 USB 设备连接到 phone,我的一个 Activity 应该从它读取数据。为了执行此操作,我根据 USB Host guide 在我的 AndroidManifest.xml
文件中创建了一个 intent-filter
,如下所示:
<activity
android:name=".activity.GetMeterDataActivity"
android:label="@string/title_activity_get_meter_data" >
<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" />
</activity>
这在我使用的模拟器中效果很好,我的 Activity
在连接设备时启动。但是,在真实设备上什么也没有发生。如果我改为按照指南中的建议注册 BradcastReceiver
作为替代解决方案,则会收到 Intent 并且我请求使用它的许可并且它有效。然而,我发现后来的解决方案不太简洁,因为你必须自己征求许可,并且真的更愿意在清单中只包含 <intent-filter>
。
尝试过:
- 我不在
device_filter.xml
中使用十六进制值。 - 阅读 SO 上我能找到但没有找到解决我的问题的所有相关帖子。
- 在预期的 Activity 和
MAIN
Activity 之间移动了<intent-filter>
但没有成功。 - 在
onCreate()
和onResume()
中记录了意图,没有或只是android.intent.action.MAIN
任何指点将不胜感激。
编辑 1: 这似乎是升级到 Lollipop 后的 Sony 问题,设备突然被列入黑名单。我可以在我的日志中看到这一点。
09-16 21:23:07.272 860-1279/? W/ContextImpl? Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1346 com.android.server.usb.UsbSettingsManager.blacklistedDeviceAttached:757 com.android.server.usb.UsbHostManager.endUsbDeviceAdded:242 com.android.server.usb.UsbHostManager.monitorUsbHostBus:-2 com.android.server.usb.UsbHostManager.access[=12=]0:49
如果它确实被列入黑名单,我仍然可以通过 BraodcastReceiver
.
是索尼过滤了我想看的Intent。随着 Sony Xperia Z3 Compact 软件版本号 23.4.A.1.232 的更新,这不再是问题,我收到了 Intent。