我是靠谱客的博主 端庄鸡,最近开发中收集的这篇文章主要介绍基于android的USB转串口通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、概述

      因为公司项目开发,需要在移动终端在开发一个usb转串口的数据通信,于是乎有了本次的记录。刚开始以为只需要在android上实现串口功能就行,后来发现,其实操作的是usb口,主要是对usb进行监听操作。

二、USB状态监听

      1、在xml中添加usb连接动作属性包括USB_DEVICE_ATTACHEDACTION_USB_DEVICE_DETACHED

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.ACTION_USB_DEVICE_DETACHED" />
</intent-filter>
</activity>
</application>

      2、注册广播,监测usb的拔插动作。

/**
* 动态注册usb广播,拔插动作,注册动作
* */
private void registerUsbSerial(){
//注册在此service下的receiver的监听的action
usbReceiver = new UsbSerialBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
intentFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
intentFilter.addAction(USB_PERMISSION);
registerReceiver(usbReceiver, intentFilter);//注册receiver
//通知监听外设权限注册状态
//PendingIntent:连接外设的intent
//ask permission
mPrtPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(USB_PERMISSION), 0);
}

      3、实现广播监听到的USB拔插动作

	if (USB_PERMISSION.equals(action)) {
//Show_TvText_Str("xxxxx"+action);
synchronized (this) {
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if ((UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE) != null) {
Show_TvText_Str("getUsbInfo");
else
Show_TvText_Str("USB外设意外消失。");
} else {
Show_TvText_Str("USB权限注册失败。");
}
}
}
// USB拔插动作
else if(UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(intent.getAction())){
Show_TvText_Str("USB 插入...");
//Search_UsbSerial();
}else if(UsbManager.ACTION_USB_DEVICE_DETACHED.equals(intent.getAction())){
Show_TvText_Str("USB 已卸载...");
}
}

三、USB串口操作

      在完成usb状态监听后,接下来就是对串口本身的操作了。我们需要搜索可用的usb串口。
      1、搜索可用usb串口,这样操作后,需要获得系统的同意权限

/**
* 搜索系统可用USB串口
*/
private int Search_UsbSerial()
{
UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
final List<UsbSerialDriver> availableDrivers
= UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager);
if (availableDrivers .isEmpty()) {
//Show_TvText_Str(String.format("empty..."));
return 0;
}
UsbSerialDriver driver = availableDrivers.get(0);
//Show_TvText_Str(String.format("+ %s ", driver));
usbSerialPort = driver.getPorts().get(0);
RequestNormalPermission(mUsbManager,usbSerialPort.getDriver().getDevice()); //获得权限!!!!!!!!!
return 1;
}

      2、获取系统对usb串口的操作权限

	/**
* 请求权限:一般来说有弹框
*/
public
void RequestNormalPermission(UsbManager usbManager,UsbDevice device) {
if (!usbManager.hasPermission(device)) {
Show_TvText_Str("printer dev has no permission,try request it!");
usbManager.requestPermission(device, mPrtPermissionIntent);// will recall mReceiver
} else {
Show_TvText_Str("USB权限注册成功");
}
}

      3、获取到权限后,我们就可以打开usb串口实现操作了。
      4、剩下的就是基本的串口读写操作了。

最后

以上就是端庄鸡为你收集整理的基于android的USB转串口通信的全部内容,希望文章能够帮你解决基于android的USB转串口通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部