文档章节

Android蓝牙连接汽车OBD设备

Oneself丶x
 Oneself丶x
发布于 2014/04/30 16:28
字数 391
阅读 586
收藏 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

Oneself丶x

粉丝 34
博文 23
码字总数 8233
作品 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
Android通过蓝牙发送数据到Windows PC电脑:Java实现

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/83146705 Android通过蓝牙发送数据到Windows PC电脑:Java实现 Android手机设备之间通...

zhangphil
10/18
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

没有更多内容

加载失败,请刷新页面

加载更多

Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部