USB請求權限流程
USB請求權限流程
1. 新建activity,獲取UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE)
2. 獲取所以的USB設備HashMap<String, UsbDevice> map = usbManager.getDeviceList()
3. 過濾別的USB設備,拿到自己USB的USBDevice類,然后請求USB權限,usbManager.requestPermission(usbDevice, pendingIntent);並注冊一個回調意圖,用來判斷用戶是否授予權限
4. UsbManager類的requestPermission方法會調用mService. requestDevicePermission
5.mService是IUsbManager的對象,而IUsbManager是一個AIDL接口https://www.androidos.net.cn/android/8.0.0_r4/xref/frameworks/base/core/java/android/hardware/usb/IUsbManager.aidl
UsbService是它的實現類,所以最終是調用的UsbService的requestDevicePermission方法
6. 在requestDevicePermission方法里面調用的getSettingsForUser(userId).requestPermission
7. getSettingsForUser(userId)其實是去獲取UsbUserSettingsManager實例,所以是調用的UsbUserSettingsManager的requestPermission方法
8. 在requestPermission方法里面首先會進行判斷是否擁有USB權限,如果有就回調廣播直接return返回的。如果沒有那就判斷是否有相機權限,如果沒有權限回調廣播直接return的。注意從始至終是沒有發送用戶拒絕的廣播的
9. 接着會調用自身的requestPermissionDialog方法,在requestPermissionDialog方法里面又會去調用mUsbPermissionManager.requestPermissionDialog方法
10.最終在UsbPermissionManager類的requestPermissionDialog方法中調用startActivityAsUser 啟動UsbPermissionActivity權限申請對話框
11.監聽彈出權限對話框的onclick方法,如果點擊的授權,那就在UsbPermissionActivity的onDestory里面回調最開始的廣播,通知我們的應用,用戶授予的權限。