应用程序在每次重启手机时都会要求USB权限

时间:2016-08-24 13:45:49

标签: android permissions usb restart

我使用USB接收器处理与通过USB连接到手机的温度传感器的通信。

到目前为止一切正常,但如果我重新启动手机,即使没有任何USB设备,应用程序会在重新启动后立即弹出 USB-Permission弹出窗口在那个时刻附在电话上。

有没有人知道导致这个奇怪问题的原因是什么?

[编辑:我很抱歉,该应用不会要求USB权限,弹出窗口询问我是否要打开应用,如果"此设备是连接"但显然没有附加设备。]

这是USB接收器的代码:

//Initial USB Settings Receiver
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        final String action = intent.getAction();

        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                // is usb permission has been granted, try to open a connection
                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    if (device != null) {
                        // call method to set up device communication
                        Constants result = mcp2221.open();

                        if (result != Constants.SUCCESS) {
                            //nothing by now
                        } else {
                            openConnectionToMCP2221();
                        }
                    }
                }
            }
        }

        if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            // close the connection and release all resources
            closeAllResources();
            // leave a bit of time for the COM thread to close
            try {
                Thread.sleep(20);
            }catch(InterruptedException e){e.printStackTrace();}
            mcp2221Comm = null;
            Toast.makeText(getApplicationContext(), "Device detached",
                    Toast.LENGTH_SHORT).show();
        }

        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
            final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
            if (device != null) {
                Toast.makeText(getApplicationContext(), "Device attached",
                        Toast.LENGTH_SHORT).show();
                mStopUSBThread=false;

                // only try to connect if an MCP2221 is attached
                if (device.getVendorId() == MCP2221_VID && device.getProductId() == MCP2221_PID) {
                    Constants result = mcp2221.open();

                    switch (result) {
                        case SUCCESS:
                            openConnectionToMCP2221();
                            break;
                        case CONNECTION_FAILED:
                            Toast.makeText(getApplicationContext(), "ERROR: connection failed", Toast.LENGTH_SHORT).show();
                            break;
                        case NO_USB_PERMISSION:
                            Toast.makeText(getApplicationContext(), "ERROR: no USB permission", Toast.LENGTH_SHORT).show();
                            mcp2221.requestUsbPermission(mPermissionIntent);
                            break;
                        default:
                            break;
                    }
                }
            }
        }

    }
};

这是onCreate()部分:

//USB Connection
    mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
    final IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);

    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
    filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
    registerReceiver(mUsbReceiver, filter);
    //Checking if theres a Device already connected
    .......

1 个答案:

答案 0 :(得分:0)

知道了! 这是一个

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

<activity>下的AndroidManifest.xml中声明。

我不完全明白,为什么它会导致这个Bug,但删除它会保留我的应用程序的功能,同时摆脱问题。

可能只有“消极”方面,现在应用程序不会要求打开传感器是否已连接到手机。