Android4.42-Settings源码分析之蓝牙模块Bluetooth(上)

本文深入分析Android4.42系统中蓝牙模块的Settings源码,涵盖蓝牙fragment配置、布局实现、模块方法及功能流程。讨论了蓝牙开关状态、已配对设备列表、蓝牙可检测性及名称修改等关键功能的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继上一篇  Android系统源码剖析(一)---Settings


接着来介绍一下设置中某个模块的源码,本文依旧是基于Android4.42源码进行分析,分析一下蓝牙模块的实现。建议大致看一下关于Settings的剖析。


ZERO,蓝牙模块的fragment及其配置

     1>,首先由Settings_headers.xml文件可以知道,蓝牙对应的fragment为BluetoothSettings.java,对应的id,icon,title,不再赘述,可自行查看xml文件即可


<!-- Bluetooth -->
    <header
        .......
        android:fragment="com.android.settings.bluetooth.BluetoothSettings"
        ......./>
       2>,所涉及到的清单配置文件中的属性详解,清单文件中介绍了蓝牙界面启动相关的一些设置,诸如有快捷方式入口,以及是否隐藏进程等等,在这里大致对一些不常见的属性进行说明,方便查阅

<activity android:name="......"
                android:uiOptions="splitActionBarWhenNarrow"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:label="@string/bluetooth_settings_title"
                android:taskAffinity=""
                android:excludeFromRecents="true">
            <intent-filter>
               ......
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.bluetooth.BluetoothSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/bluetooth_settings" />
        </activity>

        <!-- Keep compatibility with old shortcuts. -->
        <activity-alias android:name=".bluetooth.BluetoothSettings"
                
                android:label="@string/bluetooth_settings_title"
                android:targetActivity="Settings$BluetoothSettingsActivity"
                android:exported="true"
                android:clearTaskOnLaunch="true">
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.bluetooth.BluetoothSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/bluetooth_settings" />
        </activity-alias>

可以看到Bluetooth涉及到两个activity节点,一个是activity,还有一个是activity-alias(activity的别名,用于兼容旧版的快捷方式)

  • android:uiOptions="splitActionBarWhenNarrow"     // 关于导航栏actionbar的配置,在此配置为当屏幕宽度不够时控件自动显示在屏幕底部
  • android:configChanges="orientation|keyboardHidden|screenSize"  //用于禁止横竖屏切换,这个属性有几个问题需要好好说一下:第一,若不设置该属性,则切屏时会重新调用各个生命周期,切横屏调用一次,切竖屏则需要调用两次。第二,如果设置了该属性android:configChanges="orientation|keyboardHidden,则不会重新调用生命周期只会执行onConfigurationChanged方法。第三,第二条说法成立的条件是必须是Android3.2以下的版本,如果高于该版本,则必须在该属性后加上screensize(屏幕的size),才会起作用。
  • android:taskAffinity=""   //用于指定创建该activity后用于进入的栈,如果未指定该属性,则就照application节点下指定的栈,如果application也未显示的指定,则为默认的包下。
  • android:excludeFromRecents="true"   //是否显示在最近启动的程序列表中,设为true表示不显示。手机长按home键可以看到最近的程序列表,用此属性可以隐藏进程
  • 可以看到有一个与activity并列的<activity-alias../>节点。该节点属于activity的别名,目标activity不会覆盖该节点下的属性,而且,针对目标activity设置的属性会自动添加到activity-alias节点下,也就是说蓝牙模块满足两个节点下的属性,之所以有别名进行属性设置,主要是为了兼容旧的快捷方式
  • android:targetActivity="Settings$BluetoothSettingsActivity"   //由快捷方式进入所启动的activity
  • android:exported="true"  //是否支持其他应用调用启动该activity,true为是。

还加入了关于蓝牙的两个权限,BLUETOOTH和BLUETOOTH_ADMIN,前者用于允许与已经配对的蓝牙设备进行连接主要是配对后的权限,后者用于允许发现和配对蓝牙设备,主要是配对前的权限。

好了,属性配置就介绍到这儿了,接下来要真正开始蓝牙模块的学习了,首先明确模块的布局,蓝牙模块的功能,蓝牙实现的有:开启蓝牙,蓝牙重命名,蓝牙检测性及检测时间设置,扫描附近可用蓝牙设备,加载已经配对的蓝牙设备,与设备配对,连接,通信。


ONE

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值