Android BroadcastReceiver监控连接的特定USB设备
我有一个活动,在连接特定USB设备时启动,如设备筛选器文件中所指定,它非常有效:Android BroadcastReceiver监控连接的特定USB设备,android,usb,broadcast,intentfilter,Android,Usb,Broadcast,Intentfilter,我有一个活动,在连接特定USB设备时启动,如设备筛选器文件中所指定,它非常有效: <activity android:name="com.mycompany.DerpApp.MainActivity" android:launchMode="singleTask" android:label="@string/app_name" > <intent-filter>
<activity
android:name="com.mycompany.DerpApp.MainActivity"
android:launchMode="singleTask"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
我不确定如何将我的设备\u过滤器文件连接到通过编程创建的广播接收器。我可以在IntentFilter中为此做些什么吗?我认为提供给onReceive()的意图中有一个UsbDevice作为它的一个附加项,但最好是将其过滤掉,这样事件就不会触发。如果这不可能,我如何检查USB设备是否是我的设备过滤器的一部分?如果您必须以编程方式创建BroadcastReceiver,那么您也需要以编程方式过滤设备 试试这个:
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED))
{
UsbDevice d = (UsbDevice)
intent.getExtras().get(UsbManager.EXTRA_DEVICE);
if (d.getVendorId() == MY_VENDOR_ID && d.getDeviceId() == MY_DEVICE_ID)
{
// Your code here
}
}
}
我可以为服务或整个应用程序定义广播接收器吗?您所说的“为服务”是什么意思?您的意思是希望在触发广播接收器onReceive时通知服务吗?如果是这样,您可以在onReceive中绑定到该服务,并在该服务上传递您想要处理的任何数据。我的意思是服务拥有并注册Bro。当然可以。您可以在android清单中声明广播接收器,在这种情况下,android将为您创建广播接收器。或者,您可以在服务内创建一个扩展BroadcastReceiver的静态内部类,并使用registerReceiver()动态注册它。
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED))
{
UsbDevice d = (UsbDevice)
intent.getExtras().get(UsbManager.EXTRA_DEVICE);
if (d.getVendorId() == MY_VENDOR_ID && d.getDeviceId() == MY_DEVICE_ID)
{
// Your code here
}
}
}