Android 獲取 usb 權(quán)限的兩種方法
前言:
最近工作上遇到幾個(gè)USB模塊在android平臺(tái)上適配使用的情況,所以要用到USB權(quán)限獲取問(wèn)題
##USB權(quán)限獲取有以下2種方式:
一、直接在AndroidManifest.xml文件中進(jìn)行如下配置:
<activity
android:name=".DemoCustomAndroidUSBActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 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 END -->
</activity>
需要注意的是:
其中 device_filter.xml 中列出了可用 usb 設(shè)備,當(dāng)usb 設(shè)備連接手機(jī)之后,app 會(huì)自動(dòng)詢(xún)問(wèn)是否允許獲取該 usb 的權(quán)限。
device_filter.xml 放置位置如下圖所示 :

device_filter.xml中的內(nèi)容為:
<?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="1027" product-id="24577" /> <usb-device vendor-id="3405" product-id="567" /> </resources>
usb設(shè)備通過(guò) vendor-id(廠商 id) 和 product-id (產(chǎn)品 id)一起來(lái)定義的,這里有一個(gè) linux 的 usb設(shè)備廠商 id 和產(chǎn)品 id 的匯總,可以作為 Android usb 設(shè)備的參考。
二、動(dòng)態(tài)代碼獲取
2.1 代碼中獲取(前提是已經(jīng)定位到要申請(qǐng)USB權(quán)限的usbdevice)
//獲取USB設(shè)備ACTION
private static final String ACTION_USB_PERMISSION = "com.android.usb.USB_PERMISSION";
// 獲取USB設(shè)備列表及定位到要申請(qǐng)權(quán)限的USB設(shè)備
// mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
// HashMap<String, UsbDevice> devices = mUsbManager.getDeviceList();
// List<UsbDevice> deviceList = new ArrayList<UsbDevice>();
// for (UsbDevice device : devices.values()) {
// if (3540==device.getVendorId() && 567==device.getProductId()) {//獲取打印機(jī)設(shè)備 vid和pid
// currentDevice=device;
// }
// }
//開(kāi)始申請(qǐng)USB權(quán)限
private void getUsbPermission(UsbDevice mUSBDevice) {
UltraLog.d("開(kāi)始申請(qǐng)USB權(quán)限");
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
mContext.registerReceiver(mUsbReceiver, filter);
mUsbManager.requestPermission(mUSBDevice, pendingIntent); // 該代碼執(zhí)行后,系統(tǒng)彈出一個(gè)對(duì)話框/等待權(quán)限
//以下代碼是因?yàn)樵谙到y(tǒng)層將彈出框直接修改掉了,可以不用
// long start = System.currentTimeMillis();
// while (!mUsbManager.hasPermission(mUSBDevice)) {
// long current = System.currentTimeMillis();
// if ((current - start) > 3500) {
// break;
// }
// try {
// Thread.sleep(50);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// }
2.2 注冊(cè)廣播接受者
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
@SuppressLint("NewApi")
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
mContext.unregisterReceiver(mUsbReceiver);
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)
&& currentDevice.equals(device)) {
//TODO 授權(quán)成功,操作USB設(shè)備
}else{
//用戶點(diǎn)擊拒絕了
}
}
}
}
};
總結(jié)
以上所述是小編給大家介紹的Android 獲取 usb 權(quán)限的兩種方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- Android普通應(yīng)用升級(jí)為系統(tǒng)應(yīng)用并獲取系統(tǒng)權(quán)限的操作
- Android獲取超級(jí)管理員權(quán)限的實(shí)現(xiàn)
- Android 拍照選擇圖片并上傳功能的實(shí)現(xiàn)思路(包含權(quán)限動(dòng)態(tài)獲取)
- 詳解Android開(kāi)發(fā)錄音和播放音頻的步驟(動(dòng)態(tài)獲取權(quán)限)
- Android6.0獲取GPS定位和獲取位置權(quán)限和位置信息的方法
- Android簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)權(quán)限獲取相機(jī)權(quán)限及存儲(chǔ)空間等多權(quán)限
相關(guān)文章
Android通過(guò)訪問(wèn)網(wǎng)頁(yè)查看網(wǎng)頁(yè)源碼實(shí)例詳解
這篇文章主要介紹了Android通過(guò)訪問(wèn)網(wǎng)頁(yè)查看網(wǎng)頁(yè)源碼的相關(guān)資料,需要的朋友可以參考下2017-06-06
ScrollView與ListView合用(正確計(jì)算Listview的高度)的問(wèn)題解決
最近做項(xiàng)目中用到ScrollView和ListView一起使用的問(wèn)題,顯示的時(shí)候ListView不能完全正確的顯示,查了好多資料終于成功解決:2013-05-05
常見(jiàn)的8個(gè)Android內(nèi)存泄漏問(wèn)題及解決方法
在Android開(kāi)發(fā)中,內(nèi)存泄漏是一個(gè)常見(jiàn)的問(wèn)題,這個(gè)問(wèn)題可能會(huì)導(dǎo)致應(yīng)用程序變慢、崩潰或者消耗大量的內(nèi)存,最終導(dǎo)致設(shè)備性能下降,本文就給大家總結(jié)一下最常見(jiàn)的8個(gè)Android內(nèi)存泄漏問(wèn)題及解決方法,需要的朋友可以參考下2023-07-07
Android系統(tǒng)開(kāi)發(fā)中l(wèi)og的使用方法及簡(jiǎn)單的原理
LOG是廣泛使用的用來(lái)記錄程序執(zhí)行過(guò)程的機(jī)制,它既可以用于程序調(diào)試,也可以用于產(chǎn)品運(yùn)營(yíng)中的事件記錄;在平時(shí)開(kāi)發(fā)過(guò)程中經(jīng)常需要與log打交道,所以很有必要了解log的使用方法及簡(jiǎn)單的原理,感興趣的朋友可以了解下啊2013-01-01
Android?Jetpack庫(kù)重要組件WorkManager的使用
WorkManager是Android?Jetpack的一個(gè)強(qiáng)大的組件,用于處理后臺(tái)耗時(shí)任務(wù)。后臺(tái)任務(wù)可以是一次性的,也可以是重復(fù)的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解
這篇文章主要為大家介紹了Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android 1.5 1.6 2.0 2.1 2.2 的區(qū)別詳解
本篇文章是對(duì)Android 1.5 1.6 2.0 2.1 2.2 版本之間的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

