kotlin中的android与USB通信存在问题
我正在尝试在我的android和USB之间通信。我按照android.com的说明操作,但我的智能手机没有要求授权与USB通信。然而,我的智能手机确实能检测到我是否安装了USB。事实上,变量“device”总是空的,我不明白为什么。你知道这个问题吗kotlin中的android与USB通信存在问题,android,kotlin,usb,Android,Kotlin,Usb,我正在尝试在我的android和USB之间通信。我按照android.com的说明操作,但我的智能手机没有要求授权与USB通信。然而,我的智能手机确实能检测到我是否安装了USB。事实上,变量“device”总是空的,我不明白为什么。你知道这个问题吗 var ACTION_USB_ATTACHED :String = “android.hardware.usb.action.USB_DEVICE_ATTACHED” var ACTION_USB_DETACHED :String = “andro
var ACTION_USB_ATTACHED :String = “android.hardware.usb.action.USB_DEVICE_ATTACHED”
var ACTION_USB_DETACHED :String = “android.hardware.usb.action.USB_DEVICE_DETACHED”
var ACTION_USB_PERMISSION :String = “com.android.example.USB_PERMISSION”
class MainActivity : AppCompatActivity(){
var switch_on_off :Switch? = null
var tv_info : TextView? = null
//USB
var mUsbReceiver :UsbReceiver? = null
var mfilter :IntentFilter? = null
var mUsbManager :UsbManager? = null
var mPermissionIntent : PendingIntent? = null
var device :UsbDevice? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv_info = findViewById<TextView>(R.id.textView)
switch_on_off = findViewById<Switch>(R.id.switch1)
switch_on_off!!.setChecked(false)
switch_on_off!!.setText("OFF")
//USB
mUsbReceiver = UsbReceiver()
mfilter = IntentFilter()
mfilter!!.addAction(ACTION_USB_ATTACHED)
mfilter!!.addAction(ACTION_USB_DETACHED)
registerReceiver(mUsbReceiver, mfilter)
mUsbManager = getSystemService(Context.USB_SERVICE) as UsbManager
//threads
t_switchOnOff.start()
}
val t_switchOnOff = thread(start = false, priority = 10)
{
while(true){
Thread.sleep(300)
this@MainActivity.runOnUiThread(java.lang.Runnable {
if(switch_on_off!!.isChecked()){
switch_on_off!!.setText("ON")
device = intent?.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
if(device != null)
{
if(!mUsbManager!!.hasPermission(device)){
mPermissionIntent = PendingIntent.getBroadcast(this, 0, Intent(ACTION_USB_PERMISSION), 0);
mUsbManager!!.requestPermission(device, mPermissionIntent);
}
else{
tv_info!!.setText("")
tv_info!!.setText("device USB detected : ${device!!.deviceName} \n
& Authorization accorded")
}
}
else{
tv_info!!.setText("device USB NOT detected \n& usb Detached")
}
}
else{
tv_info!!.setText("")
switch_on_off!!.setText("OFF")
}
})//end this@MainActivity.runOnUiThread(java.lang.Runnable ...
}
}//end thread
class UsbReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val action = intent?.action
var ACTION_USB_PERMISSION :String = "com.android.example.USB_PERMISSION"
if (action!!.equals(ACTION_USB_DETACHED)) {}
if (action!!.equals(ACTION_USB_ATTACHED)){}
if (action!!.equals(ACTION_USB_PERMISSION)){
if (!intent!!.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,false)) {
//Authoization refused
} else {
//Authorization accepted
}
}
}
}//end class UsbReceiver }
var ACTION\u USB\u ATTACHED:String=“android.hardware.USB.ACTION.USB\u DEVICE\u ATTACHED”
var ACTION\u USB\u DETACHED:String=“android.hardware.USB.ACTION.USB\u DEVICE\u DETACHED”
var ACTION_USB_PERMISSION:String=“com.android.example.USB_PERMISSION”
类MainActivity:AppCompatActivity(){
var开关打开或关闭:开关?=null
var tv_信息:文本视图?=空
//USB
var mUsbReceiver:UsbReceiver?=null
var mfilter:IntentFilter?=null
var mUsbManager:UsbManager?=null
var mPermissionIntent:PendingIntent?=null
变量设备:UsbDevice?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv_info=findviewbyd(R.id.textView)
打开/关闭开关=findViewById(R.id.switch1)
打开/关闭开关!!.setChecked(false)
打开/关闭!!.setText(“关闭”)
//USB
mUsbReceiver=UsbReceiver()
mfilter=IntentFilter()
mfilter!!.addAction(操作\u USB\u已连接)
mfilter!!.addAction(操作\u USB\u分离)
注册接收者(mUsbReceiver,mfilter)
mUsbManager=getSystemService(Context.USB_服务)作为UsbManager
//线程
t_switchOnOff.start()
}
val t_switchOnOff=线程(开始=错误,优先级=10)
{
while(true){
线程。睡眠(300)
this@MainActivity.runOnUiThread(java.lang.Runnable){
如果(打开/关闭!!.isChecked()){
打开或关闭!!.setText(“打开”)
device=intent?.getParcelableExtra(UsbManager.EXTRA_设备)
如果(设备!=null)
{
如果(!mUsbManager!!.hasPermission(设备)){
mPermissionIntent=pendingent.getBroadcast(this,0,Intent(ACTION\u USB\u PERMISSION),0);
mUsbManager!!.requestPermission(设备、mPermissionIntent);
}
否则{
电视信息!!.setText(“”)
tv_info!!.setText(“检测到设备USB:${device!!.deviceName}\n
&授权书“)
}
}
否则{
tv_info!!.setText(“未检测到设备USB\n USB分离(&U))
}
}
否则{
电视信息!!.setText(“”)
打开/关闭!!.setText(“关闭”)
}
})//结束this@MainActivity.runOnUiThread(java.lang.Runnable。。。
}
}//端螺纹
类UsbReceiver:BroadcastReceiver(){
覆盖接收(上下文:上下文?,意图:意图?{
val动作=意图?动作
var ACTION_USB_PERMISSION:String=“com.android.example.USB_PERMISSION”
如果(action!!.equals(action_-USB_-DETACHED)){}
如果(action!!.equals(action_-USB_-ATTACHED)){}
if(action!!.equals(action\u USB\u权限)){
如果(!intent!!.getBooleanExtra(已授予UsbManager.EXTRA权限,false)){
//拒绝授权
}否则{
//接受授权
}
}
}
}//端类UsbReceiver}
感谢您的帮助实际上,您必须为每个可用的USB设备请求许可,Android官方文档并没有真正强调这一点
// register the broadcast receiver
val manager = getSystemService(Context.USB_SERVICE) as UsbManager
val permissionIntent = PendingIntent.getBroadcast(this, 0, Intent(ACTION_USB_PERMISSION), 0)
val filter = IntentFilter(ACTION_USB_PERMISSION)
registerReceiver(usbReceiver, filter)
for (dev in manager.deviceList)
{
// returns hashmap<String, UsbDevice>
Log.i("TAG", dev.key + " " + dev.value)
// now ask for permission
manager.requestPermission(dev.value, permissionIntent)
}
//注册广播接收器
val manager=getSystemService(Context.USB_服务)作为UsbManager
val permissionIntent=pendingent.getBroadcast(this,0,Intent(ACTION\u USB\u PERMISSION),0)
val filter=IntentFilter(操作\u USB\u权限)
寄存器接收器(usbReceiver,过滤器)
for(manager.deviceList中的开发)
{
//返回哈希映射
Log.i(“标记”,dev.key+“”+dev.value)
//现在请求许可
manager.requestPermission(dev.value、permissionIntent)
}
当我发现设备未找到问题时,我要做的第一件事是从命令行或adb所在的位置运行“adb设备”。