一种实现Android系统下蓝牙自动回连的方法_2

文档序号:9251342阅读:来源:国知局
用程序的形式安装在移动终端上, 本实施例以Android操作系统的移动终端(如Android手机)与蓝牙设备(如蓝牙key)之 间的蓝牙连接为应用场景对本发明的方法进行详细说明,所述移动终端包含有蓝牙模块, 用于与蓝牙设备进行蓝牙通信。如图1所示,当安装在移动终端上的该应用程序开始运行 时,执行以下步骤:
[0047] 步骤100 :初始化蓝牙连接状态,注册蓝牙监听广播;
[0048] 具体的,初始化蓝牙连接状态为未连接;
[0049] 根据应用程序的上下文(mContext)注册蓝牙监听广播(mContext.registerRece iver(broadcastReceiver,intentFilter);其中broadcastReceiver为定义的蓝牙广播接 收类的实现,intentFilter为事件启动类的实现)。
[0050] 例如,注册蓝牙监听广播的具体实现如下:
[0053] 其中,蓝牙广播接收类的具体实现如下:
[0054]
[0055] 步骤101 :检测是否已开启蓝牙模块,是则执行步骤103,否则执行步骤102 ;
[0056] 具体的,调用系统接 口函数BluetoothAdapter.getDefaultAdapter() ? isEnabledO,判断调用该函数的返回值否为true,是则已开启蓝牙模块,否则未开启。
[0057] 进一步的,若未开启蓝牙,则提示打开蓝牙,等待用户开启蓝牙模块。
[0058] 步骤102 :判断是否监听到打开蓝牙事件,是则开启蓝牙模块,然后执行步骤103, 否则返回执行步骤101 ;
[0059] 具体的,通过n(用户操作界面)层的表示打开蓝牙按钮的按钮事件即 BtnBlueOpen.SetOnClickListener来监听打开蓝牙事件。
[0060] 例如,设置的表示打开蓝牙按钮的按钮事件如下:
[0061]
[0062] 本步骤具体为,判断方法onClick(ViewV)是否被重载,是则表示监听到打开蓝 牙事件,开启蓝牙模块,然后执行步骤103,否则表示未监听到打开蓝牙事件,返回执行步骤 IOl0
[0063] 本实施例中,所述开启蓝牙模块具体包括:首先创建一个请求开启蓝牙的启动 事件,并通过调用一个回调函数判断开启蓝牙模块是否成功,若开启成功则继续执行步骤 103,若开启失败则结束。
[0064] 所述创建请求开启蓝牙的启动事件的具体实现为:Intentintent=new Intent(BluetoothAdapter.ACTI0N_REQUEST_ENABLE);
[0065] startActivityForResult(intent,C0DE_TURN_0N_BT);
[0066] 其中的intent是Android系统的一个事件启动对象,StartActivityForResult 函数是向Andr〇id系统回传请求的一个接口函数,C0DE_TURN_0N_BT是一个用于表示向 Android系统请求的请求标志;
[0067] 所述通过调用一个回调函数判断开启蓝牙模块是否成功具体为:重载Activity 下的onActivityResult(intrequestCode,intresultCode,Intentdata)函数,判断重 载该函数得到的返回值resultCode,如果resultCode= =Activity.RESULT_0K,则启动 蓝牙模块成功,如果resultCode==Activity.RESULT_CANCELED则说明用户取消了打开 Android系统蓝牙的操作,启动蓝牙模块失败。具体程序实现如下:
[0068]
[0069] 步骤103 :判断是否监听到蓝牙广播,是则执行步骤110,否则执行步骤104 ;
[0070] 具体的,判断蓝牙广播接收类broadcastReceiver下的函数onReceive(Context context,Intentintent)是否被调用,是则表示接收到蓝牙广播,执行步骤110 ;否则表示 未接收到蓝牙广播,执行步骤104。
[0071] 步骤104 :判断是否监听到连接蓝牙事件,是则执行步骤105,否则返回执行步骤 103 ;
[0072] 具体的,通过UI(用户操作界面)层的表示连接蓝牙设备按钮的按钮事件即 BtnBlueConnect.SetOnClickListener来监听连接蓝牙事件。
[0073] 例如,设置的连接蓝牙设备按钮的按钮事件如下:
[0074]
[0075] 本步骤具体为,判断方法onClick(ViewV)是否被重载,是则表示监听到连接蓝牙 事件,执行步骤105,否则表示未监听到连接蓝牙事件,执行步骤103。
[0076] 步骤105 :搜索蓝牙设备列表,获取要连接的当前蓝牙设备的蓝牙设备地址,并与 当前蓝牙设备配对;
[0077] 具体的,仓Il建一个搜索蓝牙设备列表的Activity,在蓝牙设备列表的Activity中 显示之前与移动终端已经配对过的蓝牙设备列表。同时提示用户点击搜索按钮,通过用户 点击来选择当前要连接的蓝牙设备;当用户选择要连接的蓝牙设备后,系统可以获得当前 选择的蓝牙设备的名称以及蓝牙设备地址(如macAddr:00:11:22:AA:BB:CC),通过获得蓝 牙设备地址,检测当前选择的蓝牙设备与移动终端是否已经配对,如果是则直接进下一步, 否则进入配对步骤。
[0078] 上述检测当前选择的蓝牙设备与移动终端是否已经配对,如果是则直接进下一步 即步骤106,否则进入配对步骤,具体包括:
[0079] I. 1调用Android系统接口BluetoothAdapter获得当前显示的蓝牙设备列表;
[0080] 1. 2 调用函数btAdapter.getRemoteDevice(macAddr)获得类BluetoothDevice的 一个对象device,其中macAddr为用户选择的要连接的蓝牙设备的蓝牙设备地址;
[0081] 1. 3调用类的方法device.getBondStateO判断当前选择的蓝牙设备是否与 Android系统已经配对,若device.getBondStateO!=BluetoothDevice.B0ND_B0NDED则 表明当前选择的蓝牙设备之前没有和移动终端配对过,执行步骤1.4;否则表明当前选择 的蓝牙设备之前已经和移动终端配对,直接执行步骤106 ;
[0082] 1.4与当前选择的蓝牙设备进行配对,并判断是否成功配对,是则执行步骤106, 否则结束。
[0083] 优选的,上述步骤1. 1-1. 4的具体程序实现为:
[0084]
[0085] 步骤106 :判断蓝牙连接状态是否为已连接,是则执行步骤107,否则执行步骤 108 ;
[0086] 具体的,判断蓝牙连接状态标识connected(java中boolean类型)是否为true, 是则已连接,执行步骤107,否则未连接,执行步骤108。
[0087] 进一步的,上述步骤105和步骤106的先后顺序可以调换,即先执行步骤106的判 断蓝牙连接状态是否为已连接,是则执行步骤107之后再执行步骤105,否则直接执行步骤 105,并在执行完成步骤105之后执行步骤108。
[0088] 步骤107 :根据缓存中的蓝牙设备地址,与已连接的蓝牙设备断开连接,并更新蓝 牙连接状态为未连接,然后执行步骤108 ;
[0089] 具体的,断开与当前蓝牙设备的连接,并重置蓝牙连接状态为未连接,以及注销蓝 牙连接子线程和蓝牙通信子线程。
[0090] 具体实现如下:
[0091]
[0092] 其中mConnectThread为蓝牙连接子线程,mSendRecv为蓝牙通信子线程。
[0093] 步骤108 :与当前蓝牙设备建立连接,并更新蓝牙连接状态为已连接;
[0094] 具体的,创建与已经配对的蓝牙设备的蓝牙连接子线程,以及创建蓝牙通信子线 程;如果子线程创建成功,则通过传入的Handler来更新主n线程,来说明终端与蓝牙设备 已经成功连接。
[0095] 先创建连接蓝牙设备的蓝牙连接子线程,在蓝牙连接子线程创建成功后,再创建 蓝牙通信子线程。具体程序实现如下:
[0096]


[0099] 其中connect为蓝牙连接子线程,connected为蓝牙通信子线程。
[0100] 步骤109 :将当前蓝牙设备地址存入缓存,并将终端型号和终端MAC地址发送给当 前蓝牙设备,然后执行步骤116 ;
[0101] 具体的,与蓝牙设备建立连接成功后,终端应用程序会把当前蓝牙设备的名称 以及蓝牙设备地址通过SharedPreferences缓存到本地,然后终端应用程序会把终端 Android系统的终端厂商、终端型号以及终端
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1