导航:首页 > 操作系统 > android蓝牙串口通讯

android蓝牙串口通讯

发布时间:2023-06-11 01:22:20

android_studio手机蓝牙串口通信源代码

初涉android的蓝牙操作,按照固定MAC地址连接获取Device时,程序始终是异常终止,查了好多天代码都没查出原因。今天改了一下API版本,突然就成功连接了。总结之后发现果然是个坑爹之极的错误。

为了这种错误拼命查原因浪费大把时间是非常不值得的,但是问题不解决更是揪心。可惜我网络了那么多,都没有给出确切原因。今天特此mark,希望后来者遇到这个问题的时候能轻松解决。

下面是我的连接过程,中间崩溃原因及解决办法。

1:用AT指令获得蓝牙串口的MAC地址,地址是简写的,按照常理猜测可得标准格式。

2:开一个String adress= "************" //MAC地址, String MY_UUID= "************"//UUID根据通信而定,网上都有。

3:取得本地Adapter用getDefaultAdapter(); 远程的则用getRemoteDevice(adress); 之后便可用UUID开socket进行通信。

如果中途各种在getRemoteDevice处崩溃,大家可以查看一下当前的API版本,如果是2.1或以下版本的话,便能确定是API版本问题,只要换成2.2或者以上就都可以正常运行了~ 这么坑爹的错误的确很为难初学者。 唉·········· 为这种小trick浪费很多时间真是难过。

(另外有个重要地方,别忘了给manifest里面加以下两个蓝牙操作权限哦~)

㈡ Android蓝牙BLE连接如何设置串口,数据格式为含1位起始位、7位数据位、1位奇偶校验位和1位终止位

字符长度=1+7+1+2=11 b/字符
数据速率R1=11×100=1100 b/s
有效数据速率R=7×100=700 b/s
选B

㈢ android蓝牙串口通信,接收数据问题

http://stackoverflow.com/questions/16089261/how-to-convert-byte-valueto-hex-and-then-to-decimal-which-is-from-bluetooth-spp

㈣ android蓝牙开发,PC端模拟串口接收字符,该如何编程

您好,android蓝牙这方面还是很好搞的,因为大家的方式都是差不多的。先说说如何开启蓝牙设备和设置可见时间:

private void search() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (!adapter.isEnabled()) {
adapter.enable();
}
Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
enable.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 3600); //3600为蓝牙设备可见时间
startActivity(enable);
Intent searchIntent = new Intent(this, ComminuteActivity.class);
startActivity(searchIntent);
}

首先,需要获得一个BluetoothAdapter,可以通过getDefaultAdapter()获得系统默认的蓝牙适配器,当然我们也可以自己指定,但这个真心没有必要,至少我是不需要的。然后我们检查手机的蓝牙是否打开,如果没有,通过enable()方法打开。接着我们再设置手机蓝牙设备的可见,可见时间可以自定义。

完成这些必要的设置后,我们就可以正式开始与蓝牙模块进行通信了:

public class ComminuteActivity extends Activity {
private BluetoothReceiver receiver;
private BluetoothAdapter bluetoothAdapter;
private List<String> devices;
private List<BluetoothDevice> deviceList;
private Bluetooth client;
private final String lockName = "BOLUTEK";
private String message = "000001";
private ListView listView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_layout);

listView = (ListView) this.findViewById(R.id.list);
deviceList = new ArrayList<BluetoothDevice>();
devices = new ArrayList<String>();
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothAdapter.startDiscovery();
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
receiver = new BluetoothReceiver();
registerReceiver(receiver, filter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setContentView(R.layout.connect_layout);
BluetoothDevice device = deviceList.get(position);
client = new Bluetooth(device, handler);
try {
client.connect(message);
} catch (Exception e) {
Log.e("TAG", e.toString());
}
}
});
}

@Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}

private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case Bluetooth.CONNECT_FAILED:
Toast.makeText(ComminuteActivity.this, "连接失败", Toast.LENGTH_LONG).show();
try {
client.connect(message);
} catch (Exception e) {
Log.e("TAG", e.toString());
}
break;
case Bluetooth.CONNECT_SUCCESS:
Toast.makeText(ComminuteActivity.this, "连接成功", Toast.LENGTH_LONG).show();
break;
case Bluetooth.READ_FAILED:
Toast.makeText(ComminuteActivity.this, "读取失败", Toast.LENGTH_LONG).show();
break;
case Bluetooth.WRITE_FAILED:
Toast.makeText(ComminuteActivity.this, "写入失败", Toast.LENGTH_LONG).show();
break;
case Bluetooth.DATA:
Toast.makeText(ComminuteActivity.this, msg.arg1 + "", Toast.LENGTH_LONG).show();
break;
}
}
};

private class BluetoothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (isLock(device)) {
devices.add(device.getName());
}
deviceList.add(device);
}
showDevices();
}
}

private boolean isLock(BluetoothDevice device) {
boolean isLockName = (device.getName()).equals(lockName);
boolean isSingleDevice = devices.indexOf(device.getName()) == -1;
return isLockName && isSingleDevice;
}

private void showDevices() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
devices);
listView.setAdapter(adapter);
}
}

㈤ Android蓝牙传输速率限制在串口吗

这个限制是在串口。
为了保证有效通讯,根据电、传输介质等的物理特性结合串口设备使用的要求,确定RS232最大传输速率只能是115200,然后逐级二分得到57600,28800,19200??为适应这些速率,设计相应的晶振频率。
串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
串口是计算机上一种非常通用的设备通信协议。大多数计算机(不包括笔记本电脑)包含两个基于RS-232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。

㈥ 求各位大神帮忙,本人想通过Android的蓝牙读取蓝牙串口的数据,并在一个TextView上显示该怎么做

这个我们袜拆前之前也做过,不过没有demo,我们都做成公司的产品了。首先你要去了解android的蓝牙api,以及手机与手机之间的,通信,然后告清你御册要做硬件和android通信,需要做一些小的变动,主要变动就是在数据流处理的地方,就不要用android的API了,就自己从最简单的数据流进行处理吧。我们就是这么做出来的。

㈦ (蓝牙串口)Bluetooth Serial

该插件可以通过蓝牙进行串行通信。 它是为了在Android或iOS和Arino之间进行通信而编写的。
Repo(备用): https://github.com/don/BluetoothSerial

1.安装Cordova和Ionic原生插件:

2. 添加插件到app's mole

Android
iOS
Windows Phone 8

connect(macAddress_or_uuid)

Platforms:****ANDROID IOS WINDOWS PHONE
连接到蓝牙设备

****Returns:** Observable<any>
连接订阅,断开连接取消订阅。

connectInsecure(macAddress)

Platforms:****ANDROID
蓝牙设备不安全地连接

****Returns:** Observable<any>
连接订阅,断开连接取消订阅。

disconnect()

断开连接的设备
****Returns:** Promise<any>

write(data)

Platforms:****ANDROID IOS WINDOWS PHONE
将数据写入串口

****Returns:** Promise<any>
当数据写入时返回promise

available()

Platforms:****ANDROID IOS WINDOWS PHONE
获取可用数据的字节数
****Returns:** Promise<any>
返回包含可用字节的promise

read()

Platforms:****ANDROID IOS WINDOWS PHONE
从缓冲区读取数据
****Returns:** Promise<any>
从缓冲区返回数据的promise

readUntil(delimiter)

Platforms:****ANDROID IOS WINDOWS PHONE
从缓冲区读取数据,直到达到定界符

****Returns:** Promise<any>
returns a promise

subscribe(delimiter)

Platforms:****ANDROID IOS WINDOWS PHONE
订阅收到数据时收到通知

****Returns:** Observable<any>
返回一个observable.

subscribeRawData()

Platforms:****ANDROID IOS WINDOWS PHONE
订阅收到数据时收到通知
****Returns:** Observable<any>
返回一个observable

clear()

Platforms:****ANDROID IOS WINDOWS PHONE
清除缓冲区中的数据
****Returns:** Promise<any>
完成后返回promise

list()

Platforms:****ANDROID IOS WINDOWS PHONE
列出绑定设备
****Returns:** Promise<any>
返回一个promise

isEnabled()

Platforms:****ANDROID IOS WINDOWS PHONE
报告蓝牙是否启用
****Returns:** Promise<any>
返回一个promise

isConnected()

Platforms:****ANDROID IOS WINDOWS PHONE
报告连接状态
****Returns:** Promise<any>
返回一个promise

readRSSI()

Platforms:****ANDROID IOS WINDOWS PHONE
从连接的外围设备读取RSSI
****Returns:** Promise<any>
返回一个promise

showBluetoothSettings()

Platforms:****ANDROID IOS WINDOWS PHONE
显示设备上的蓝牙设置
****Returns:** Promise<any>
返回一个promise

enable()

Platforms:****ANDROID IOS WINDOWS PHONE
在设备上启用蓝牙
****Returns:** Promise<any>
返回一个 promise

discoverUnpaired()

Platforms:****ANDROID IOS WINDOWS PHONE
发现不配对的设备
****Returns:** Promise<any>
返回一个promise

setDeviceDiscoveredListener()

Platforms:****ANDROID IOS WINDOWS PHONE
订阅蓝牙设备发现通知。 发现过程必须通过discoverUnpaired 来启动功能。
****Returns:** Observable<any>
返回一个 observable

setName(newName)

Platforms:****ANDROID
设置广播到其他设备的可读设备名称

setDiscoverable(discoverableDuration)

Platforms:****ANDROID
使设备可以被其他设备发现

㈧ android蓝牙串口通讯助手怎么用

蓝牙客户端通信工具(即:蓝牙从机模式),可进行蓝牙串口通信测试。能连接单片机及PC的蓝牙串口。

手机蓝牙串口助手是一个J2ME程序,可以运行在支持蓝牙和J2ME的手机上,通过蓝牙转串口模块的配合使用,可以在手机上控制串口设备,例如modem、LCD显示屏。

简单说,你不必太在意这个工具,是开发人员工具,用来让你手机与其他IT设备连接通讯用的。

当你电脑需要通过蓝牙控制 手机 打电话,发短信,用到的就是蓝牙串口(com)通道。你手机可以通过蓝牙关关电脑,也是用的蓝牙串口通道。

不用太在意,这些功能用专门软件实现比较好,不需要在开发。

阅读全文

与android蓝牙串口通讯相关的资料

热点内容
c传递指针到python 浏览:160
手动添加引导的命令 浏览:52
740服务器小蓝条是做什么的 浏览:520
linux文件操作命令 浏览:125
安卓手机图片文件夹加锁 浏览:778
steam提示音在哪个文件夹 浏览:337
项目开发全程实录pdf 浏览:530
单片机reset 浏览:595
pdf怎么是英文 浏览:969
旗云2压缩机保险 浏览:374
做程序员压力大吗表情包 浏览:312
pdf下拉 浏览:371
php去掉小数后面的0 浏览:954
阿里备案买什么服务器 浏览:261
网络驱动下载到哪个文件夹 浏览:482
达内程序员培训西安 浏览:505
人保送车主惠app上怎么年检 浏览:604
android手机开机密码 浏览:481
linux查看某个进程命令 浏览:530
闲置的腾讯云服务器 浏览:439