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 蓝牙连接obd,Android蓝牙连接汽车OBD设备
//设备连接 public class BluetoothConnect implements Runnable { private static final UUID CONNECT_UUID = ...
- Android Socket编程android端服务器和客户端的实现
Android Socket编程android端服务器和客户端的实现 其实和java实现的差不多,或本质是用java实现的,但由于android有自身的独特性,所以还是有一些要注意的点: ...
- android开发重要控件,Android界面编程——Android基本控件
Android界面编程 Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户. 作为一个程序员 ...
- android 蓝牙设备断开,android – 如何检查设备的蓝牙连接是否断开?
我想知道我与设备的蓝牙连接何时断开连接.我发现这个要检查: IntentFilter filter1 = new IntentFilter(BluetoothDevice.ACTION_ACL_CON ...
- android 无sdk usb/蓝牙 连接热敏打印机外卖小票打印
这是部分代码 获取代码 ->发送标题作为验证信息到该邮箱 itperson@foxmail.com /** js spi 蓝牙连接 接收 mac address :返回mac ad ...
- android高级编程-android高级应用
android高级应用>>> 第一阶段 程序员基本素质养成 程序员所需要具备的12条职业素质 让学员初步了解和审视自己所应该具备的职业素质.并且我们会在授课中随时训练和贯彻这样的素质 ...
- android 扫码枪编程,android 扫码枪解惑
第一次知道超市用的那种扫描枪居然还可以通过蓝牙连接,直接把扫描结果显示在editText. 既然需求来了那就做把,刚开始一脸懵逼,google一下吧!看了几篇相关的文章大概了解有两种连接蓝牙的方式,一 ...
- 蓝牙最新版本6.0_手机蓝牙连接汽车放歌。放30秒就没声音了是什么坏了?
展开全部 车载蓝牙的驱动比较旧,32313133353236313431303231363533e59b9ee7ad9431333433656632可尝试使用手机最低版本的蓝牙传送试一下. 1.先检查 ...
- android surface编程,Android编程之SurfaceView实例详解
本文实例讲述了Android编程之SurfaceView用法.分享给大家供大家参考,具体如下: 关于surfaceView相关知识: View和SurfaceView主要区别: 1. View只能在U ...
最新文章
- 冰球项目开发日志(一)
- 交管12123显示当前环境存在风险_政策|取消驾驶证年龄上限、推行异地通办,12项交管新政来了...
- JAVA基础——最简单的多重循环程序
- 利用BADI ME_PROCESS_PO_CUST進行PO check
- http消息当中,post和get两种请求方式的区别
- Find the Kth number(找第K大数)
- win7+vs2010+opnet教程
- 数学建模4 拟合算法
- linux java运行环境_linux(centos)中java运行环境_jdk安装与配置 | OPS技术联盟
- qq恢复官方网站服务器繁忙,qq恢复官方网站
- 量化开发必掌握的30个知识点【什么是分笔逐笔数据】?
- 液晶显示器不宜使用屏幕保护程序
- 规划求解 python_使用Python/PuLp解决线性规划问题
- (arduino基于W5100实现TCP客户端
- pytest入门_测试用例分类_@pytest.mark.smoke
- 女生节横幅标语计算机学院,计算机院第四届女生节活动
- pta—紧急救援 (dijkstra)
- 京东辟谣程序员在页面置入骂人代码
- [HR面试] 65个最常见的面试问题
- mysql语法太难记住了_MYSQL语法实例(仅学习)
热门文章
- python 文件管理_python 文件操作
- UE3 渲染线程的分析及优化
- java 多线程基础, 我觉得还是有必要看看的
- 《中国人工智能学会通讯》——4.32 数据包丢失
- 网易财报暗藏玄机,不经意间已编织出电商大网
- 怎么搞一个ORM出来用用呢???迷茫中
- pyplot 画多个图时搅合到了一起_这些认数字游戏,宝宝最喜欢,家长可以和宝宝一起玩...
- strcmp可以比较数组么_数组:总结篇
- python栈应用_栈应用之 后缀表达式计算 (python 版)
- docker 启动时指定需要绑定的网卡_Docker容器网络-基础篇