android蓝牙源码分析

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 15:59 我要评论(0)

一、开启(BT Turn on Turn off) (蓝牙的打开关闭由类BluetoothEnabler控制。)

1.由BluetoothEnabler控制界面操作,在其构造函数里会先调用 LocalBluetoothManager.getInstance(context)。

2.然后在 LocalBluetoothManager类的getInstance函数里会调用当前类下的init()函数,该init()函数中通过 BluetoothAdapter.getDefaultAdapter()获得蓝牙设备的句柄,如果当前没有蓝牙设备则返回null。

3.初始化完毕会监听checkbox的状态,当触发点击checkbox会响应onPreferenceChange方法,其中将调用 LocalBluetoothManager.setBluetoothEnabled(enable)方法。

而LocalBluetoothManager.setBluetoothEnabled(enable)方法,会调用mAdapter.enable()方法,enable()方法又会调用 BluetoothService.enable()方法。其中,

(1)打开(关闭)操作 成功后会有一个异步事件ACTION_STATE_CHANGED返回,异步事件由类BluetoothEventRedirector控制(接收广播, 进行处理)。在收到ACTION_STATE_CHANGED异步事件后,还需要做update本地设备profile的事情,读取上次关闭前搜索到的蓝 牙设备。

(1.1)update本地设备profile的事情:?

(1.2)读取上次关闭前搜索到的蓝牙设备:

通过 LocalBluetoothManager.setBluetoothStateInt(int state)方法调到 CachedBluetoothDeviceManager.onBluetoothStateChanged方法来读取上次关闭之前搜索到 device.

(2)来开启EnableThread线程,进行打开操作,蓝牙的打开关闭属于异步操作。

ps:在启动蓝牙的时候,要注意的地方是不能正常启动蓝牙的情况,因为正常启动的时候会返回BluetoothIntent.ENABLED_ACTION 这个Intent,当时当启动出现异常的时候是没有Intent返回的,android使用回调函数来解决这个问题。下面是在bluetoothdeviceservice.java 里面enable((IBluetoothDeviceCallback callback) 的过程:(以下代码属于较低版本的android源码,与较高版本源码中已有所不同,只作为参考...)

View Code

public synchronized boolean enable(IBluetoothDeviceCallback callback) {

checkPermissionBluetoothAdmin();

Log.d(TAG,"start enable! ");

// Airplane mode can prevent Bluetooth radio from being turned on.

if (mIsAirplaneSensitive && isAirplaneModeOn()) {

return false;

}

if (mIsEnabled) {

return false;

}

if (mEnableThread != null && mEnableThread.isAlive()) {

return false;

}

//主要的启动过程是放在一个新起的线程里面,但是不管能不能启动

//仍然返回了true

mEnableThread = new EnableThread(callback);

mEnableThread.start();

//

return true;

}

private EnableThread mEnableThread;

private class EnableThread extends Thread {

private final IBluetoothDeviceCallback mEnableCallback;

public EnableThread(IBluetoothDeviceCallback callback) {

mEnableCallback = callback;

}

public void run() {

boolean res = enableNative();

if (res) {

mEventLoop.start();

}

if (mEnableCallback != null) {

try {

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...