概述
一、概述
因为公司项目开发,需要在移动终端在开发一个usb转串口的数据通信,于是乎有了本次的记录。刚开始以为只需要在android上实现串口功能就行,后来发现,其实操作的是usb口,主要是对usb进行监听操作。
二、USB状态监听
1、在xml中添加usb连接动作属性包括USB_DEVICE_ATTACHED
和ACTION_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转串口通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复