文档章节

Android蓝牙连接汽车OBD设备

Oneself丶x
 Oneself丶x
发布于 2014/04/30 16:28
字数 391
阅读 576
收藏 1
//设备连接
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;
    }


© 著作权归作者所有

Oneself丶x
粉丝 34
博文 23
码字总数 8139
作品 2
海淀
高级程序员
Android 4.2蓝牙介绍

Tieto公司某蓝牙大牛写得《程序员》投稿文章 Android 4.2蓝牙介绍 蓝牙一词源于公元十世纪丹麦国王HaraldBlatand名字中的Blatand。Blatand的英文之意就是Blue tooth。这是因为这位让丹麦人引...

sflfqx
2014/08/12
0
0
Android 4.2蓝牙介绍

Tieto公司某蓝牙大牛写得《程序员》投稿文章 Android 4.2蓝牙介绍 蓝牙一词源于公元十世纪丹麦国王HaraldBlatand名字中的Blatand。Blatand的英文之意就是Blue tooth。这是因为这位让丹麦人引...

ChaosWu
2013/09/12
0
0
实战分享,教你蓝牙在小程序中的应用

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:朱胜 导语 蓝牙在日常生活中广泛使用的一项技术,小程序给了我们前端工程师一个控制蓝牙的方法,带上你的设备,来看看怎...

腾讯云加社区
2017/10/23
0
0
android开发笔记之2012版辅助开发工具包(ADT)新功能特性介绍及安装使用

原文链接:http://android.eoe.cn/topic/androidsdk 2012年的Android辅助设备开发工具包(ADK)是Android开放设备协议(AOA)设备的最新参考实现,它被用于帮助Android硬件辅助设备开发者 和...

sisuad
2013/07/09
0
0
Android深入浅出系列之Bluetooth—蓝牙操作(一)

  一:什么是蓝牙     1:Bluetooth是目前使用最广泛的无线通讯协议,近距离无线通讯的标准。传说瑞典有个国王特别爱吃蓝莓导致自己的牙齿天天都是蓝色的,在他执政期间这位国王非常善...

芋头被人用掉了
2015/05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Memcached启动参数详解

memcached -d -m 1024 -l 192.168.100.101 -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80 -t 16 运行参数描述 -d:以守护(daemon)进程方式启动; -u:是运行Memcache的用户,例如 ......

月下狼
16分钟前
0
0
xgboost-kaggle

https://www.kaggle.com/dansbecker/xgboost This tutorial is part of the Learn Machine Learning series. In this step, you will learn how to build and optimize models with the powe......

tantexian
17分钟前
0
0
nginx学习八 代理服务

最常用的语法 proxy_pass Syntax: proxy_pass URL;Default: --Context:location.if in location,limit_exception 反向代理 例:/etc/nginx/conf.d/default.conf 反向代理(代理服务端)......

Romanceling
24分钟前
0
0
npm ERR! Unexpected end of JSON ...

npm install 报错: npm ERR! Unexpected end of JSON input while parsing near '..."^2.8.14"},"_hasShrin' npm ERR! A complete log of this run can be found in: ... 打开终端 命令: 第......

大_侠
28分钟前
0
0
Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象...

newtrek
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部