我是靠谱客的博主 诚心大米,最近开发中收集的这篇文章主要介绍Android 外接设备获取驱动和获取申请权限前言一、UsbManager 是什么?二、使用步骤总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
前言
一、UsbManager 是什么?
二、使用步骤
1.获取UsbManager
2.获取设备驱动列表
3.和厂家或三方获取接入的驱动的参数
4、检查权限、申请权限
5、源码示例
总结
前言
公司要开发一个终端产品,这个产品外接了很多设备,比如:指纹、身份证识别、高拍仪等,
但是外接的设备不可以使用普通的权限申请的方式,要使用UsbManager 来进行权限的检查和权限申请。
一、UsbManager 是什么?
UsbManager 是个服务直译过来也就是Usb管理类,通过getSystemService(AppCompatActivity.USB_SERVICE) 获取实例,通过getDeviceList()函数可以获取到当前设备终端所链接的所有驱动。
二、使用步骤
1.获取UsbManager
代码如下(示例):
val usbManager = activity.getSystemService(AppCompatActivity.USB_SERVICE) as UsbManager
2.获取设备驱动列表
usbManager.deviceList
3.和厂家或三方获取接入的驱动的参数
参数包括:产品ID、产品版本、产品名称、驱动ID
//产品ID
val device_pid = device.productId
//供应商ID
val vendor_id = device.vendorId
//产品名称
val product_name = device.productName
//....
........
4、检查权限、申请权限
//检查权限
usbManager.hasPermission(device)
//申请权限
val intent = Intent(ACTION_USB_PERMISSION)
val pendingIntent = PendingIntent.getBroadcast(activity, 0, intent, 0)
usbManager.requestPermission(device, pendingIntent)
5、源码示例
这里面的判断一定要根据自己接入的驱动进行判断
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.hardware.usb.UsbDevice
import android.hardware.usb.UsbManager
import android.os.Parcelable
import androidx.appcompat.app.AppCompatActivity
import com.example.idrdemo.IDCardUtil
import me.hgj.jetpackmvvm.ext.util.loge
object UsbPermission {
var vid = -1
var pid = -1
private var ACTION_USB_PERMISSION = ""
private val usbMgrReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
"权限注册$action >> $ACTION_USB_PERMISSION >>> $pid".loge()
if (ACTION_USB_PERMISSION == action) {
val device =
intent.getParcelableExtra<Parcelable>(UsbManager.EXTRA_DEVICE) as UsbDevice?
if (device!!.vendorId == vid && device.productId == pid) {
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
"权限注册成功".loge()
getManPer(context)
} else {
"权限注册失败".loge()
getManPer(context)
}
}
} else if (UsbManager.ACTION_USB_DEVICE_ATTACHED == action) {
val device =
intent.getParcelableExtra<Parcelable>(UsbManager.EXTRA_DEVICE) as UsbDevice?
if (device!!.vendorId == vid && device.productId == pid) {
"权限注册成功222".loge()
}
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED == action) {
val device =
intent.getParcelableExtra<Parcelable>(UsbManager.EXTRA_DEVICE) as UsbDevice?
if (device!!.vendorId == vid && device.productId == pid) {
"权限注册成功移除了驱动".loge()
ToastUtils.showLong("驱动被移除了$ACTION_USB_PERMISSION")
}
}
}
}
private var usbDevice: UsbDevice? = null
fun getManPer(activity: Context) {
val usbManager = activity.getSystemService(AppCompatActivity.USB_SERVICE) as UsbManager
for (device in usbManager.deviceList.values) {
val device_pid = device.productId
val vendor_id = device.vendorId
val productName = device.productName
//这里面的判断一定要根据自己接入的驱动进行判断
when {
vendor_id == 6997 && !usbManager.hasPermission(device) -> {
usbDevice = device
}
//这判断有可能会出现两个驱动的 vendor_id 相等,才加的产品名称判断
vendor_id == 7119 && productName?.contains("JSK-RGB") == true && !usbManager.hasPermission(
device
) -> {
usbDevice = device
}
}
}
getPre(activity, usbManager)
}
private fun getPre(activity: Context, usbManager: UsbManager) {
if (null == usbDevice) return
usbDevice?.let {
if (!usbManager.hasPermission(it) ) {
vid = it.vendorId
pid = it.productId
ACTION_USB_PERMISSION = "$vid-$pid"
val filter = IntentFilter()
filter.addAction(ACTION_USB_PERMISSION)
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED)
activity.registerReceiver(usbMgrReceiver, filter)
val intent = Intent(ACTION_USB_PERMISSION)
val pendingIntent = PendingIntent.getBroadcast(activity, 0, intent, 0)
usbManager.requestPermission(it, pendingIntent)
}
}
}
}
总结
上面就是对UsbManager处理的标签
最后
以上就是诚心大米为你收集整理的Android 外接设备获取驱动和获取申请权限前言一、UsbManager 是什么?二、使用步骤总结的全部内容,希望文章能够帮你解决Android 外接设备获取驱动和获取申请权限前言一、UsbManager 是什么?二、使用步骤总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复