预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

android蓝牙源码分析 BluetoothService类中定义的Native方法都在android_server_BluetoothServer.cpp里建立jni调用 一、开启(BTTurnonTurnoff)(蓝牙的打开关闭由类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(intstate)方法调到CachedBluetoothDeviceManager.onBluetoothStateChanged方法来读取上次关闭之前搜索到device. (2)来开启EnableThread线程,进行打开操作,蓝牙的打开关闭属于异步操作。 ps:在启动蓝牙的时候,要注意的地方是不能正常启动蓝牙的情况,因为正常启动的时候会返回BluetoothIntent.ENABLED_ACTION这个Intent,当时当启动出现异常的时候是没有Intent返回的,android使用回调函数来解决这个问题。下面是在bluetoothdeviceservice.java里面enable((IBluetoothDeviceCallbackcallback)的过程:(以下代码属于较低版本的android源码,与较高版本源码中已有所不同,只作为参考...) 001ViewCode 002publicsynchronizedbooleanenable(IBluetoothDeviceCallbackcallback){ 003checkPermissionBluetoothAdmin(); 004Log.d(TAG,"startenable!"); 005//AirplanemodecanpreventBluetoothradiofrombeingturnedon. 006if(mIsAirplaneSensitive&&isAirplaneModeOn()){ 007returnfalse; 008} 009if(mIsEnabled){ 010returnfalse; 011} 012if(mEnableThread!=null&&mEnableThread.isAlive()){ 013returnfalse; 014} 015//主要的启动过程是放在一个新起的线程里面,但是不管能不能启动 016//仍然返回了true 017mEnableThread=newEnableThread(callback); 018mEnableThread.start(); 019// 020returntrue; 021 022} 023 024privateEnableThreadmEnableThread; 025privateclassEnableThreadextendsThread{ 026privatefinalIBluetoothDeviceCallbackmEnableCallback; 027publicEnableThread(IBluetoothDeviceCallbackcallback){ 028mEnableCallback=callbac