标签:string gets system article rac screen cal man 调用
Android4.42-Settings源代码分析之蓝牙模块Bluetooth(上)
Android4.42-Setting源代码分析之蓝牙模块Bluetooth(下)
switch从创建到动作状态监听步骤例如以下
Switch actionBarSwitch = new Switch(activity);
activity.getActionBar().setCustomView(............);
mBluetoothEnabler = new BluetoothEnabler(activity, actionBarSwitch);
setHasOptionsMenu(true);
以上一系列的代码都是在BluetoothSettings.java中完毕,接下来就是在BluetoothEnabler.java中进行处理
总结,switch相关的逻辑实现就这些。在BluetoothSettings中创建switch实例,在BluetoothEnabler.java中对switch的状态监听及更新,查看代码不难发现BluetoothEnabler.java类中是专门对switch进行处理的类。
mMyDevicePreference = new Preference(getActivity());
preferenceScreen.addPreference(mMyDevicePreference);
mDiscoverableEnabler = new BluetoothDiscoverableEnabler(getActivity(), mLocalAdapter, mMyDevicePreference); mDiscoverableEnabler.resume();
蓝牙名称--title的更新过程在BluetoothSettings.java中完毕,步骤例如以下
mMyDevicePreference.setTitle(mLocalAdapter.getName());
new BluetoothNameDialogFragment().show( getFragmentManager(), "rename device");
mLocalAdapter.setName();
在当前的activity弹出对话框消失后程序不会运行onResume方法。所以在BluetoothSettings.java中注冊广播
蓝牙可检測性---summary的更新显示
对于summary的显示更新的操作在BluetoothDiscoverableEnabler.java中完毕,该类专用于更新summary以及处理mMyDevicePreference的点击事件
在显示summary时有两种情况,
i>。假设本地蓝牙既能够扫描又能够被检測到即处于SCAN_MODE_CONNECTABLE_DISCOVERABLE状态时。则依据可检測性时间的长短来显示,显示内容为:附近全部设备能够检測到+timeout
ii>,假设是别的状态,则要依据是否已经有已配对的设备进行显示,显示为“已配对设备可见”或者是“对全部设备不可见”
既然说到了可检測性。直接说一说可检測时间,在程序启动时注冊了广播BluetoothDiscoverableTimeoutReceiver,当可检測时间结束后就会将蓝牙的扫描状态设置为BluetoothAdapter.SCAN_MODE_CONNECTABLE,即取消对全部设备的可检測性
localBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);当设定了可检測性为固定的一段时间后则会设置一个闹钟,用于触发广播,当所规定的时间到达时会触发广播。将手机蓝牙的可检測性关闭,假设想要永久的能够被检測到。则仅仅需讲闹钟取消掉,不再触发广播就可以
Intent intent = new Intent(INTENT_DISCOVERABLE_TIMEOUT); intent.setClass(context, BluetoothDiscoverableTimeoutReceiver.class); PendingIntent pending = PendingIntent.getBroadcast( context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService (Context.ALARM_SERVICE); if (pending != null) { // Cancel any previous alarms that do the same thing. alarmManager.cancel(pending); Log.d(TAG, "setDiscoverableAlarm(): cancel prev alarm"); } pending = PendingIntent.getBroadcast( context, 0, intent, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pending);
对于可检測性时间到达时对蓝牙可检測性的设置在BluetoothDiscoverableTimeoutReceiver.java中。该类为广播组件。专门用于开启或者关闭可检測性的闹钟计时、关闭可检測性。
加入已配对设别列表
mPairedDevicesCategory = new PreferenceCategory(getActivity());
addDeviceCategory(mPairedDevicesCategory, R.string.bluetooth_preference_paired_devices, BluetoothDeviceFilter.BONDED_DEVICE_FILTER);
setDeviceListGroup(preferenceGroup);
加入附近可用设备列表
getPreferenceScreen().addPreference(mAvailableDevicesCategory);
设备的点击事件在BluetoothDevicePreference中处理。设备状态不同则动作不同:假设是已配对设备则点击后就进行连接。假设是为配对的设备点击后进行配对。假设是已连接的设备点击后断开连接。
Android4.42-Settings源代码分析之蓝牙模块Bluetooth总体实现(总)
标签:string gets system article rac screen cal man 调用
原文地址:http://www.cnblogs.com/yangykaifa/p/7359634.html