因此,为了缓解每次启动应用程序时都必须授予权限的问题,我关注了this answer
因此,我设置了设备筛选器
<resources>
<usb-device vendor-id="1234" product-id="5678" />
</resources>清单中的活动
<activity
android:name=".demo.Activity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_demo"
android:theme="@style/FullscreenTheme">
<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/usb_device_filter" />
</activity>然后在我的java文件中
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action))
{
synchronized (this)
{
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if(device != null)
{
checkDevice();
}
}
}
}
};IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
mContext.registerReceiver(mUsbReceiver, filter);如果我在连接设备的情况下启动应用程序,它不会亮起,设备的应用程序接口也不会与其通信(但是,它会显示在UsbManager.getDeviceList()调用中)
只要我把它拆下来,再插回去,它就能工作了
有没有一种方法可以通过编程“重新连接”设备,或者其他修复方法?谢谢
发布于 2019-08-08 23:27:46
在应用启动时检查设备列表中是否存在设备。
UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
Iterator devices = manager.getDeviceList().entrySet().iterator();
while (devices.hasNext()) {
Map.Entry pair = (Map.Entry) devices.next();
Log.i(TAG, pair.getKey() + " = " + pair.getValue());
UsbDevice device = (UsbDevice) pair.getValue();
Log.i(TAG, "UsbDevice: " + device.toString());
if(device.getVendorId() == 1234 && device.getProductId() == 5678) {
}
}https://stackoverflow.com/questions/57415341
复制相似问题