android 蓝牙源码分析

上传人:飞*** 文档编号:31691963 上传时间:2018-02-09 格式:DOC 页数:9 大小:64.50KB
返回 下载 相关 举报
android 蓝牙源码分析_第1页
第1页 / 共9页
android 蓝牙源码分析_第2页
第2页 / 共9页
android 蓝牙源码分析_第3页
第3页 / 共9页
android 蓝牙源码分析_第4页
第4页 / 共9页
android 蓝牙源码分析_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《android 蓝牙源码分析》由会员分享,可在线阅读,更多相关《android 蓝牙源码分析(9页珍藏版)》请在金锄头文库上搜索。

1、android 蓝牙源码分析BluetoothService 类中定义的 Native 方法都在 android_server_BluetoothServer.cpp 里建立jni 调用一、开启(BT Turn on Turn off) (蓝牙的打开关闭由类 BluetoothEnabler 控制。 )1.由 BluetoothEnabler 控制界面操作,在其构造函数里会先调用 LocalBluetoothManager.getInstance(context)。2.然后在 LocalBluetoothManager 类的 getInstance 函数里会调用当前类下的 init()函数,该

2、init()函数中通过 BluetoothAdapter.getDefaultAdapter()获得蓝牙设备的句柄,如果当前没有蓝牙设备则返回 null。 3.初始化完毕会监听 checkbox 的状态,当触发点击 checkbox 会响应 onPreferenceChange 方法,其中将调用 LocalBluetoothManager.setBluetoothEnabled(enable)方法。而 LocalBluetoothManager.setBluetoothEnabled(enable)方法,会调用 mAdapter.enable()方法,enable()方法又会调用 Blueto

3、othService.enable()方法。其中,(1)打开(关闭)操作成功后会有一个异步事件 ACTION_STATE_CHANGED 返回,异步事件由类 BluetoothEventRedirector 控制(接收广播,进行处理) 。在收到ACTION_STATE_CHANGED 异步事件后,还需要做 update 本地设备 profile 的事情,读取上次关闭前搜索到的蓝牙设备。(1.1)update 本地设备 profile 的事情:?(1.2)读取上次关闭前搜索到的蓝牙设备:通过 LocalBluetoothManager.setBluetoothStateInt(int state

4、)方法调到 CachedBluetoothDeviceManager.onBluetoothStateChanged 方法来读取上次关闭之前搜索到device. (2)来开启 EnableThread 线程,进行打开操作,蓝牙的打开关闭属于异步操作。ps:在启动蓝牙的时候,要注意的地方是不能正常启动蓝牙的情况,因为正常启动的时候会返回 BluetoothIntent.ENABLED_ACTION 这个 Intent,当时当启动出现异常的时候是没有 Intent 返回的,android 使用回调函数来解决这个问题。下面是在bluetoothdeviceservice.java 里面 enable

5、((IBluetoothDeviceCallback callback) 的过程:(以下代码属于较低版本的 android 源码,与较高版本源码中已有所不同,只作为参考.)001 View Code 002 public synchronized boolean enable(IBluetoothDeviceCallback callback) 003 checkPermissionBluetoothAdmin(); 004 Log.d(TAG,start enable! ); 005 / Airplane mode can prevent Bluetooth radio from being

6、 turned on. 006 if (mIsAirplaneSensitive & isAirplaneModeOn() 007 return false; 008 009 if (mIsEnabled) 010 return false; 011 012 if (mEnableThread != null & mEnableThread.isAlive() 013 return false; 014 015 / 主要的启动过程是放在一个新起的线程里面,但是不管能不能启动 016 / 仍然返回了 true 017 mEnableThread = new EnableThread(callba

7、ck); 018 mEnableThread.start(); 019 / 020 return true; 021 022 023 024 private EnableThread mEnableThread; 025 private class EnableThread extends Thread 026 private final IBluetoothDeviceCallback mEnableCallback; 027 public EnableThread(IBluetoothDeviceCallback callback) 028 mEnableCallback = callba

8、ck; 029 030 public void run() 031 boolean res = enableNative(); 032 if (res) 033 mEventLoop.start(); 034 035 036 if (mEnableCallback != null) 037 try 038 039 / 通过回调函数来表明是否正常启动蓝牙设备 040 mEnableCallback.onEnableResult(res ? 041 BluetoothDevice.RESULT_SUCCESS : 042 BluetoothDevice.RESULT_FAILURE); 043 c

9、atch (RemoteException e) 044 045 046 if (res) 047 mIsEnabled = true; 048 mIsDiscovering = false; 049 050 Intent intent = new Intent(BluetoothIntent.ENABLED_ACTION); 051 mContext.sendBroadcast(intent); 052 053 else 054 mIsEnabled = false; 055 mIsDiscovering = false; 056 057 mEnableThread = null; 058

10、059 060 061 062 063 064 065 066 067 / 这个回调函数将被作为参数传进 bluetoothservice 里面的enable( IBluetoothDeviceCallback callback) 068 static class DeviceCallback extends IBluetoothDeviceCallback.Stub 069 Handler messageHandler; 070 071 public void setHandler(Handler handler) 072 synchronized (this) 073 messageHan

11、dler = handler; 074 075 076 077 public void onEnableResult(int result) 078 switch(result) 079 080 / 启动不成功的时候执行 081 case BluetoothDevice.RESULT_FAILURE: 082 messageHandler.sendMessage(messageHandler.obtainMessage(EVENT_FAILED_BT_ENABLE,0); 083 break; 084 085 086 087 088 / 配对完成时执行 089 public void onCr

12、eateBondingResult(String address, int result) 090 synchronized (this) 091 if (messageHandler != null) 092 if (result = BluetoothDevice.RESULT_FAILURE) 093 messageHandler.sendMessage(messageHandler.obtainMessage( 094 HANDLE_PAIRING_FAILED, address); 095 else 096 messageHandler.sendMessage(messageHandler.obtainMessage( 097 HANDLE_PAIRING_P

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号