android10.0 USB彈窗權限流程解析


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里面回調最開始的廣播,通知我們的應用,用戶授予的權限。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM