Android两次请求USB访问权限

问题描述 投票:1回答:1

我有一个旨在操作USB串行设备的应用程序。清单包含相应的过滤器:

<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" />

当我插入USB设备时,系统弹出对话框会问“ 打开 ...何时连接此USB设备?”。我可以确认或拒绝,这部分工作正常。但是,如果我拒绝然后从菜单中重新启动应用程序,则我的手机会挂出。在堆栈跟踪中,我看到了错误:

User has not given permission to device UsbDevice...

因此,我必须明确要求USB许可。我尝试了几种实现,最简单的实现是这样的(我使用usb_serial_for_android库:https://github.com/mik3y/usb-serial-for-android):

@Override
protected void onResume() {
....
    UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
    ...
    List<UsbSerialDriver> availableDrivers = CustomProber.getCustomProber().findAllDrivers(manager);
    ...
    UsbSerialDriver driver = availableDrivers.get(0);
    if (!manager.hasPermission(driver.getDevice())) {
        manager.requestPermission(
            driver.getDevice(),
            PendingIntent.getBroadcast(this, 0, new Intent("com.android.example.USB_PERMISSION"), 0));
    return;
    }
....
}

问题是“ manager.requestPermission”执行两次。

当我从菜单启动应用程序时,弹出对话框会问“ 允许应用程序...以访问USB设备?”如果我确认,将再次出现相同的对话框,但是我的答复并不重要。似乎已经授予了该权限,就好像我拒绝了第二个请求一样,该应用程序继续工作并成功与设备通信。这是一个相当烦人的行为:(

我想念什么?

P.S。我还尝试了Android开发人员(https://developer.android.com/guide/topics/connectivity/usb/host)描述的“规范”方法。但是,此基于BroadcastReceiver的实现的行为方式相同。我已经阅读了相关文章,例如这篇Android asks for USB permission twice,并与作者进行了交流。问题仍然存在。

java android android-permissions
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.