android 蓝牙源码分析.doc

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

《android 蓝牙源码分析.doc》由会员分享,可在线阅读,更多相关《android 蓝牙源码分析.doc(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()函数,该init()函数中通过Bluet

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

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

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

5、低版本的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 turned on. 006 if (mIsAirplaneSensitive & isAirpl

6、aneModeOn() 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(callback); 018 mEnableThread.start(); 019 / 020 return tr

7、ue; 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 = callback; 029 030 public void run() 031 boolean res = ena

8、bleNative(); 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 catch (RemoteException e) 044 045 046 if (res) 047 m

9、IsEnabled = 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 059 060 061 062 063 064 065 066 067 / 这个回调函数将被作为参数传

10、进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 messageHandler = handler; 074 075 076 077 public void onEnableR

11、esult(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 onCreateBondingResult(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

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

当前位置:首页 > 生活休闲 > 社会民生

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