android 蓝牙连接obd,Android蓝牙连接汽车OBD设备
//设备连接
public class BluetoothConnect implements Runnable {
private static final UUID CONNECT_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private Loger loger = Loger.getLoger();
private BluetoothDevice mDevice;
private BluetoothSocket mSocket;
private IInterface iInterface;
private OutputStream out;
private boolean isConnected = false;
public BluetoothConnect(BluetoothDevice device) {
this.mDevice = device;
}
public interface IInterface {
void connected(BluetoothDevice device);
void receive(String string);
void disconnect(BluetoothDevice device);
void connectError();
}
@Override
public void run() {
try {
if (iInterface == null) {
loger.e("IBluetoothData interface is null");
return;
}
loger.d("connecting bluetooth device................");
int sdk = Build.VERSION.SDK_INT;
if (sdk >= 10) {
mSocket = mDevice.createInsecureRfcommSocketToServiceRecord(CONNECT_UUID);
} else {
mSocket = mDevice.createRfcommSocketToServiceRecord(CONNECT_UUID);
}
mSocket.connect();
iInterface.connected(mDevice);
isConnected = true;
InputStream in = mSocket.getInputStream();
out = mSocket.getOutputStream();
String s = "";
byte[] buffer = new byte[1024 * 3];
int len;
while((len = in.read(buffer)) > 0){
s += new String(buffer, 0, len, "GBK");
int index = -1;
while ((index = s.indexOf("\r\n")) != -1) {
iInterface.receive(s.substring(0, index + 2));
s = s.substring(index + 2, s.length());
index = -1;
}
}
} catch (IOException e) {
loger.e("", e);
iInterface.connectError();
}finally{
iInterface.disconnect(mDevice);
isConnected = false;
}
}
public void setInterface(IInterface iInterface) {
this.iInterface = iInterface;
}
public boolean isConnected(){
return isConnected;
}
public void write(byte[] buffer) {
if (out != null) {
try {
out.write(buffer);
out.flush();
} catch (IOException e) {
loger.e("write error", e);
}
}
}
public void close() {
try {
if (mSocket != null) {
mSocket.close();
}
} catch (IOException e) {
loger.e("close error", e);
}
}
}
搜索设备
//首先动态注册广播
IntentFilter filter = new IntentFilter();
filter.setPriority(Integer.MAX_VALUE);
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
registerReceiver(receiver, filter);
//创建广播接收器
public BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device;
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String name = device.getName();
String address = device.getAddress();
int state = device.getBondState();
loger.d(String.format("found bluetooth device name=%s address=%s state=%s", name, address, state == BluetoothDevice.BOND_BONDED ? "BOND_BONDED" : "BOND_NONE"));
if (!adapter.getDevices().contains(device)) {
adapter.addDevice(device);
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
loger.d("select bluetooth device over!!!");
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
}
} else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
switch (device.getBondState()) {
case BluetoothDevice.BOND_BONDING:
loger.d("bluetooth device bonding....");
break;
case BluetoothDevice.BOND_BONDED:
adapter.notifyDataSetChanged();
loger.d("bluetooth device bonded");
break;
case BluetoothDevice.BOND_NONE:
loger.d("bluetooth device none!!!");
break;
default:
break;
}
}
}
};
//配对方法
public boolean createBond(BluetoothDevice device) {
try {
Method createBondMethod = device.getClass().getMethod("createBond");
return (Boolean) createBondMethod.invoke(device);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
android 蓝牙连接obd,Android蓝牙连接汽车OBD设备相关推荐
- android 判断是否正在扫描蓝牙_判断蓝牙是否连接
Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发. 1. 首先,要操作蓝牙,先要在AndroidManifest.xml里 ...
- Android蓝牙无法通信,android.bluetooth.BluetoothSocket无法连接
我已经尝试了其他评论中的所有建议,但都没有效果,我希望有人能帮助我.我已经为这个问题挣扎了三天了.我确信我的uuid是正确的,并且我知道清单中启用了蓝牙访问. 我正在尝试将我的android应用程序连 ...
- Android ble连接过程,Android开发之ble蓝牙
前言 由于自己工作中需要开发ble的项目,于是在折腾了一段时间后也有所了解,便想写下来分享给大家,同时对自己的知识也是一种巩固 1.BLE介绍 BLE是Bluetooth Low Energy的缩写, ...
- android spp传输速度,Android蓝牙SPP连接似乎在几秒后就已经死了
我有一个相当简单的程序,主要基于这里发布的简单蓝牙测试客户端应用程序: 我的应用程序有4个按钮,每个按钮通过蓝牙连接发送不同的数据字节. 似乎工作得很好几秒钟.建立连接,RFCOMM插座连接,并在最初 ...
- android 蓝牙地址连接打印机,android 连接蓝牙打印机 BluetoothAdapter
android 连接蓝牙打印机 BluetoothAdapter 源码下载地址:https://github.com/yylxy/BluetoothText.git public class Prin ...
- android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...
电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上) 前段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝 ...
- Android蓝牙Ble基本操作-(连接2)
前言: 连接采用nordicsemi库,其中nRF Connect也是使用该库. 蓝牙连接库.nordicsemi官网.nRF Connect apk使用教程.nRF Connect apk下载地址. ...
- Android开发-连接开发板蓝牙模块发送和接收数据
帮同学写一个连接小车蓝牙模块遥控小车的APP,在网上搜阅了很多资料,大概了解了蓝牙的工作原理,再经历了种种BUG后终于是成功连上了小车蓝牙,并可以发送数据,小车可以接收到,测试的蓝牙是Arduino小 ...
- android 蓝牙 连接失败,Android蓝牙连接 – 服务发现失败
我正在尝试创建一个基本的蓝牙应用程序,用于测试设备. 我从developer.android获得了代码. 这是链接: http : //developer.android.com/guide/topi ...
- Android蓝牙开发系列文章-蓝牙音箱连接
经过一段时间的折腾,我的Android Studio终于可以正常工作了,期间遇到的坑记录在了文章<创建Android Studio 3.5第一个工程遇到的坑>. 我们在<Androi ...
最新文章
- 一步步学习SPD2010--第十一章节--处理母版页(7)--管理Content Placeholders
- futuretask java 并发请求_Java面试题整理一(侧重多线程并发)
- 品牌诞生于两个驱动力
- linux系统入门命令大全,Linux常用命令5 - Linux 入门常用命令_Linux教程_Linux公社-Linux系统门户网站...
- 软件开发团队的脓包(1-3)皇帝的新装、口号党、废话迷
- 绩效打c被开除,员工将新东方告上法院,获赔416000元!
- 服务器怎么用iso文件装系统,ISO镜像文件能直接安装吗 怎么使用iso镜像文件安装系统...
- ERwin Data Modeler数据库建模工具使用纪要
- 2015年春节往事小记
- c语言课程实验总结报告,c语言实验总结报告.doc
- 变色龙(Floyd算法)
- unity2018 Image使用Sliced九宫格进行调整
- OpenCV开发笔记(四十四):红胖子8分钟带你深入了解霍夫圆变换(图文并茂+浅显易懂+程序源码)
- CDA数据分析师协会等级认证证书
- The Apache Way - 开源项目
- Java基础 常见数据结构与算法 项目总结
- carplay是否可以用安卓系统_苹果CarPlay系统是什么?安卓系统手机能用吗?
- poi导出word表格设置自动重调尺寸适应内容固定表格宽度
- C++字符串赋值、拼接、查找、替换、存取、插入删除和子串
- #110-【我也不知道这是什么鬼算法】Ska Piggy Banks
热门文章
- bash shell简介及变量
- 利用VBA在EXCLE2010和2007中找回2003式的经典菜单和工具栏
- Python语法之com[1][:-7]
- centos搭建git服务
- Linux nm命令
- Android:布局单位换算
- Silverlight --- Behavior技术(三)
- .NET 3.5(14) - XLINQ(LINQ to XML)之针对XML文件的添加、查询、更新和删除
- 只有在配置文件或 Page 指令中将 enableSessionState”的异常解决办法
- (转)解决Google Adsense广告只显示英文的问题