Android 无线调试+检测usb外部设备插入并打开app

最近在做一个需要连接usb外设的项目,主要记录一下中间碰到的两个问题。

  • 因为项目需要所以中间要在插入usb外设的情况下进行调试,但是手机只有一个连接口,在没办法的情况下只能想到用无线调试的方法
  • 实现插入usb外设打开相应app

一、无线调试

  • 设备: 华为P10 +window10

  • 前提条件:手机和电脑必须连接同一WiFi

  • 操作步骤:
    1、将手机和电脑连接
    2、打开cmd 输入 adb tcpip 9999 ,这个数字自定义随便取,如下图:
    在这里插入图片描述
    3、拔掉usb连接线,也可以不拔,如果最后不成功就拔掉再重新操作一遍。
    4、输入 adb connect 192.168.0.121:9999 ,如下图:
    在这里插入图片描述
    这个ip地址是手机连接的WiFi IP地址。
    5、最后可以输入 adb devices查看设备是否连接。

    以上步骤也是大部分相关文章的内容,但是有些手机这样是没办法正常开启无线调试的,比如我的华为P10,还需要在开发人员选项中打开 仅充电模式下允许ADB调试
    好了,无线调试至此结束,又收获了一项新技能。

二、插入usb外设然后打开相应app
这个问题是让我耗费时间最长的问题了,为啥呢,因为一开始方向就错了,我的思路是监听usb外设插入的广播然后启动app。结果不多想肯定是不行的。为此我还实验了开机自动启动,结果发现了在Android6.0上可以实现监听开机广播app自启动,但是在Android8.0的手机上就不行了,开机之后纹丝不动,在网上逛了一大圈也没有找到解决的办法。不过付出还是有回报的,最后我才发现原来想实现的功能和广播接收毛关系都没有。

  • 解决方法:在manifest中加入以下内容
    在这里插入图片描述
    并新建xml文件夹,新建devices_filter.xmlwen文件夹 内容如下图:
    在这里插入图片描述
    里面的内容应该是厂商id和产品id,所以当此型号设备通过Usb连接到系统时,对应的Activity就会启动。
    参考连接https://blog.csdn.net/lincyang/article/details/50739342
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android应用程序中访问USB设备,您需要执行以下步骤: 1. 在AndroidManifest.xml文件中添加以下权限: ``` <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> ``` 2. 检测连接的USB设备: ``` UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> usbDevices = usbManager.getDeviceList(); if (!usbDevices.isEmpty()) { // USB设备已连接 UsbDevice device = usbDevices.get(deviceName); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); usbManager.requestPermission(device, pendingIntent); } else { // 没有连接的USB设备 } ``` 3. 处理用户授权: ``` private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; BroadcastReceiver usbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if (device != null) { // 授权成功,可以开始访问USB设备 } } else { // 用户拒绝了授权请求 } } } } }; registerReceiver(usbReceiver, new IntentFilter(ACTION_USB_PERMISSION)); ``` 4. 访问USB设备: ``` UsbDeviceConnection connection = usbManager.openDevice(device); UsbInterface usbInterface = device.getInterface(0); UsbEndpoint endpoint = usbInterface.getEndpoint(0); connection.claimInterface(usbInterface, true); byte[] buffer = new byte[endpoint.getMaxPacketSize()]; int count = connection.bulkTransfer(endpoint, buffer, buffer.length, TIMEOUT); ``` 请注意,这仅是一个简单的示例,并且需要根据您的具体需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值