//设备连接

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设备相关推荐

  1. android 判断是否正在扫描蓝牙_判断蓝牙是否连接

    Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发. 1. 首先,要操作蓝牙,先要在AndroidManifest.xml里 ...

  2. Android蓝牙无法通信,android.bluetooth.BluetoothSocket无法连接

    我已经尝试了其他评论中的所有建议,但都没有效果,我希望有人能帮助我.我已经为这个问题挣扎了三天了.我确信我的uuid是正确的,并且我知道清单中启用了蓝牙访问. 我正在尝试将我的android应用程序连 ...

  3. Android ble连接过程,Android开发之ble蓝牙

    前言 由于自己工作中需要开发ble的项目,于是在折腾了一段时间后也有所了解,便想写下来分享给大家,同时对自己的知识也是一种巩固 1.BLE介绍 BLE是Bluetooth Low Energy的缩写, ...

  4. android spp传输速度,Android蓝牙SPP连接似乎在几秒后就已经死了

    我有一个相当简单的程序,主要基于这里发布的简单蓝牙测试客户端应用程序: 我的应用程序有4个按钮,每个按钮通过蓝牙连接发送不同的数据字节. 似乎工作得很好几秒钟.建立连接,RFCOMM插座连接,并在最初 ...

  5. android 蓝牙地址连接打印机,android 连接蓝牙打印机 BluetoothAdapter

    android 连接蓝牙打印机 BluetoothAdapter 源码下载地址:https://github.com/yylxy/BluetoothText.git public class Prin ...

  6. android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...

    电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上) 前段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝 ...

  7. Android蓝牙Ble基本操作-(连接2)

    前言: 连接采用nordicsemi库,其中nRF Connect也是使用该库. 蓝牙连接库.nordicsemi官网.nRF Connect apk使用教程.nRF Connect apk下载地址. ...

  8. Android开发-连接开发板蓝牙模块发送和接收数据

    帮同学写一个连接小车蓝牙模块遥控小车的APP,在网上搜阅了很多资料,大概了解了蓝牙的工作原理,再经历了种种BUG后终于是成功连上了小车蓝牙,并可以发送数据,小车可以接收到,测试的蓝牙是Arduino小 ...

  9. android 蓝牙 连接失败,Android蓝牙连接 – 服务发现失败

    我正在尝试创建一个基本的蓝牙应用程序,用于测试设备. 我从developer.android获得了代码. 这是链接: http : //developer.android.com/guide/topi ...

  10. Android蓝牙开发系列文章-蓝牙音箱连接

    经过一段时间的折腾,我的Android Studio终于可以正常工作了,期间遇到的坑记录在了文章<创建Android Studio 3.5第一个工程遇到的坑>. 我们在<Androi ...

最新文章

  1. 一步步学习SPD2010--第十一章节--处理母版页(7)--管理Content Placeholders
  2. futuretask java 并发请求_Java面试题整理一(侧重多线程并发)
  3. 品牌诞生于两个驱动力
  4. linux系统入门命令大全,Linux常用命令5 - Linux 入门常用命令_Linux教程_Linux公社-Linux系统门户网站...
  5. 软件开发团队的脓包(1-3)皇帝的新装、口号党、废话迷
  6. 绩效打c被开除,员工将新东方告上法院,获赔416000元!
  7. 服务器怎么用iso文件装系统,ISO镜像文件能直接安装吗 怎么使用iso镜像文件安装系统...
  8. ERwin Data Modeler数据库建模工具使用纪要
  9. 2015年春节往事小记
  10. c语言课程实验总结报告,c语言实验总结报告.doc
  11. 变色龙(Floyd算法)
  12. unity2018 Image使用Sliced九宫格进行调整
  13. OpenCV开发笔记(四十四):红胖子8分钟带你深入了解霍夫圆变换(图文并茂+浅显易懂+程序源码)
  14. CDA数据分析师协会等级认证证书
  15. The Apache Way - 开源项目
  16. Java基础 常见数据结构与算法 项目总结
  17. carplay是否可以用安卓系统_苹果CarPlay系统是什么?安卓系统手机能用吗?
  18. poi导出word表格设置自动重调尺寸适应内容固定表格宽度
  19. C++字符串赋值、拼接、查找、替换、存取、插入删除和子串
  20. #110-【我也不知道这是什么鬼算法】Ska Piggy Banks

热门文章

  1. bash shell简介及变量
  2. 利用VBA在EXCLE2010和2007中找回2003式的经典菜单和工具栏
  3. Python语法之com[1][:-7]
  4. centos搭建git服务
  5. Linux nm命令
  6. Android:布局单位换算
  7. Silverlight --- Behavior技术(三)
  8. .NET 3.5(14) - XLINQ(LINQ to XML)之针对XML文件的添加、查询、更新和删除
  9. 只有在配置文件或 Page 指令中将 enableSessionState”的异常解决办法
  10. (转)解决Google Adsense广告只显示英文的问题