代码流程分析二:Settings-蓝牙分析-myDevice根preference分析
2015-08-10 14:18
543 查看
一:流程图已经分析
二:代码的分析
准备工作:
如果有可以配对的设备这个preference显示的是:(1)已经配对的设备检测到此设备;(2)没有就显示其他蓝牙设备检测不到此设备。
(3)点击之后会显示附近多有的蓝牙设备都能检测到此设备,并且会加个时间。
后台流程:分析BluetoothDiscoverableEnabler这个类。
蓝牙的discoverable mode由类BluetoothDiscoverableEnabler控制。点击将触发OnPreferenceChangeListener监听事件,调用onPreferenceChange()方法,该方法中调用setEnabled(true),而setEnabled(true)方法将调用到BluetoothAdapter的setScanMode
() 方法。
蓝牙模式有两种模式SCAN_MODE_CONNECTABLE_DISCOVERABLE(可连接可发现)和SCAN_MODE_CONNECTABLE(可连接但不可发现)
涉及到的类:
LocalBluetoothManager
BluetoothDiscoverableEnabler
BluetoothAdapter
-------------->在构造方法中(Context context, LocalBluetoothAdapter adapter,Preference discoveryPreference)
只做了简单的初始化操作:上下文,adapter,preference。
-------------->reSume()方法
蓝牙的扫描模式发生了变化没:new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED),注册广播接收者,判断如果扫描模式发生了变化-->跟这俩比较EXTRA_SCAN_MODE和EXTRA_PREVIOUS_SCAN_MODE, 两个附加域分别是新的和旧的扫描模式,如果是新模式的话--->handleModeChanged。
-------------->setNumberOfPairedDevices(int pairedDevices)方法
传进来配对好的设备,------->handleModeChanged。用法:传进来的参数是已经配对好的蓝牙设备个数,然后走更新,导致preference的内容变了。
-------------->onPause()方法
移除handler消息,步更新名字了。preference不能点击,接收MODE扫描模式。
---------------------------------------------------------------------------------
前台流程:
因为前台在bluetoothSettings中update()方法中有段代码将这个preference交给了BluetoothDiscoverableEnabler这个类来管理。相当于前台做的就是这个类做的。
也就是点击事件:
给preference设置点击事件:mDiscoveryPreference.setOnPreferenceClickListener(this);也就是哪个的preference传进来,那么哪个的设备那个preference就可以点击。
就是点了之后的操作:后续分析为什么点了之后会MODE变化?
handleModeChanged--->拿MODE和SCAN_MODE_NONE, SCAN_MODE_CONNECTABLE, SCAN_MODE_DISCOVERABLE;他们比。是第三个也就是蓝牙能被搜到才走
如果MODE是第三个也就是附近的设备都可以检测到这个设备。状态----->updateCountdownSummary();设备搜到的截止时间-当前时间/1000;--->更新上去,更具时间判断时间完了就显示:显示附近所有的蓝牙设备。时间还走着就显示:显示附近所有设备加时间,mDiscoveryPreference.setSummary(mContext.getString(R.string.bluetooth_is_discoverable, textTimeout));关于时间的实现代码:
否则MODE是别的--->setSummaryNotDiscoverable();1:已经配对的设备存在的话,给preference设置内容是仅配对的设备才能检测到本设备;2:否则显示不让附近的设备检测到这个设备
如果是新的扫描模式,不仅自己会变,接收到新模式变的广播也会变;可以点击;设置内容,更新时间。
二:代码的分析
准备工作:
如果有可以配对的设备这个preference显示的是:(1)已经配对的设备检测到此设备;(2)没有就显示其他蓝牙设备检测不到此设备。
(3)点击之后会显示附近多有的蓝牙设备都能检测到此设备,并且会加个时间。
后台流程:分析BluetoothDiscoverableEnabler这个类。
蓝牙的discoverable mode由类BluetoothDiscoverableEnabler控制。点击将触发OnPreferenceChangeListener监听事件,调用onPreferenceChange()方法,该方法中调用setEnabled(true),而setEnabled(true)方法将调用到BluetoothAdapter的setScanMode
() 方法。
蓝牙模式有两种模式SCAN_MODE_CONNECTABLE_DISCOVERABLE(可连接可发现)和SCAN_MODE_CONNECTABLE(可连接但不可发现)
涉及到的类:
LocalBluetoothManager
BluetoothDiscoverableEnabler
BluetoothAdapter
-------------->在构造方法中(Context context, LocalBluetoothAdapter adapter,Preference discoveryPreference)
只做了简单的初始化操作:上下文,adapter,preference。
-------------->reSume()方法
蓝牙的扫描模式发生了变化没:new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED),注册广播接收者,判断如果扫描模式发生了变化-->跟这俩比较EXTRA_SCAN_MODE和EXTRA_PREVIOUS_SCAN_MODE, 两个附加域分别是新的和旧的扫描模式,如果是新模式的话--->handleModeChanged。
-------------->setNumberOfPairedDevices(int pairedDevices)方法
传进来配对好的设备,------->handleModeChanged。用法:传进来的参数是已经配对好的蓝牙设备个数,然后走更新,导致preference的内容变了。
-------------->onPause()方法
移除handler消息,步更新名字了。preference不能点击,接收MODE扫描模式。
---------------------------------------------------------------------------------
前台流程:
因为前台在bluetoothSettings中update()方法中有段代码将这个preference交给了BluetoothDiscoverableEnabler这个类来管理。相当于前台做的就是这个类做的。
也就是点击事件:
给preference设置点击事件:mDiscoveryPreference.setOnPreferenceClickListener(this);也就是哪个的preference传进来,那么哪个的设备那个preference就可以点击。
就是点了之后的操作:后续分析为什么点了之后会MODE变化?
handleModeChanged--->拿MODE和SCAN_MODE_NONE, SCAN_MODE_CONNECTABLE, SCAN_MODE_DISCOVERABLE;他们比。是第三个也就是蓝牙能被搜到才走
如果MODE是第三个也就是附近的设备都可以检测到这个设备。状态----->updateCountdownSummary();设备搜到的截止时间-当前时间/1000;--->更新上去,更具时间判断时间完了就显示:显示附近所有的蓝牙设备。时间还走着就显示:显示附近所有设备加时间,mDiscoveryPreference.setSummary(mContext.getString(R.string.bluetooth_is_discoverable, textTimeout));关于时间的实现代码:
private static String formatTimeRemaining(int timeout) { StringBuilder sb = new StringBuilder(6); // "mmm:ss" int min = timeout / 60; sb.append(min).append(':'); int sec = timeout - (min * 60); if (sec < 10) { sb.append('0'); } sb.append(sec); return sb.toString(); } synchronized (this) { mUiHandler.removeCallbacks(mUpdateCountdownSummaryRunnable); mUiHandler.postDelayed(mUpdateCountdownSummaryRunnable, 1000);延迟1S发消息 } private final Runnable mUpdateCountdownSummaryRunnable = new Runnable() { public void run() { updateCountdownSummary(); } }; 这个消息是一直发的。
否则MODE是别的--->setSummaryNotDiscoverable();1:已经配对的设备存在的话,给preference设置内容是仅配对的设备才能检测到本设备;2:否则显示不让附近的设备检测到这个设备
如果是新的扫描模式,不仅自己会变,接收到新模式变的广播也会变;可以点击;设置内容,更新时间。
相关文章推荐
- html3秒跳转
- 前端自动化测试mocha入门
- javascript 常用兼容fire fox的解决办法
- javascript自定义 error事件
- HtmlCss样式笔记
- poj 3255 dijstra求次短路
- [jquery实例] 判断图片资源加载完毕
- CSS特殊性、重叠
- 解禁 MAVEN “Plugin execution not covered by lifecycle configuration” 问题
- 史上最详细的JavaScript事件使用指南
- Servlet+jsp实现简单购物车
- 在C#中实现Json的序列化与反序列化
- jquery 为动态生成元素绑定事件
- jquery学习
- fgetc,feof
- js关于for循环里的setTimeout
- 进入做Mvc项目的时候 返现某个文件夹下面css js png等静态文件都访问不了
- 【定制】在settings中的PreferenceScreen中添加一个图片
- CSS里的pointer-events属性
- JS中数组Array的用法{转载}