蓝牙(Bluetooth)设备通讯,并连接WIFI

本文详细介绍了在Android平台上如何实现蓝牙设备的通讯连接,包括蓝牙的经典模式和BLE(低功耗蓝牙)模式,涉及权限设置、API使用、功能实现等方面。同时,文章也阐述了WiFi的相关功能,包括获取WiFi信息、连接WiFi等步骤,以及在连接过程中可能出现的问题和解决方案。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/lf0814/article/details/79217937

2018年01月31日 15:39:17 CristianoLi` 阅读数:3504

 

蓝牙&WiFi

蓝牙:安卓平台提供对蓝牙的通讯栈的支持,允许设别和其他的设备进行无线传输数据。应用程序层通过安卓API来调用蓝牙的相关功能,这些API使程序无线连接到蓝牙设备,并拥有P2P或者多端无线连接的特性。

 

功能:客户端先在系统页面打开蓝牙和服务端进行配对,配对完成后,返回APP中,显示所有已经配对的蓝牙设备信息列表。点击某一个已配对的蓝牙设备,客户端和服务端进行蓝牙通讯连接。连接成功后,显示服务端的一些支持信息,然后进入WIFI设置页面,扫描WiFi列表,点击某一个WiFi进行密码连接,连接成功后,将WiFi信息发送到服务端,服务端接收后开始连接,完成。

 

支持Apple的设备与Android设备的通讯:通过使用BLE(低功耗蓝牙,Bluetooth Low Energy,又叫蓝牙4.0)就可以实现,它有两个角色,分别是中央角色,和周边角色。中心设备(中央角色)使用来自与外部设备的信息去完成某项特定任务,外部设备(周边角色)包含一项或者多项服务,一个服务是一个数据集合。

()蓝牙相关

1)权限

蓝牙所需权限,(6.0之上需要用户授权)


<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 

2API相关

经典模式:

    • BluetoothAdapter:代表本地蓝牙适配器(蓝牙无线电)。BluetoothAdapter是所有蓝牙交互的入口。使用这个你可以发现其他蓝牙设备,查询已配对的设备列表,使用一个已知的MAC地址来实例化一个BluetoothDevice,以及创建一个BluetoothServerSocket来为监听与其他设备的通信。
    • BlueDevice:代表一个远程蓝牙设备,使用这个来请求一个与远程设备的BluetoothSocket连接,或者查询关于设备名称、地址、类和连接状态等设备信息。
    • BluetoothSocket:代表一个蓝牙socket的接口(和TCP Socket类似)。这是一个连接点,它允许一个应用与其他蓝牙设备通过InputStream和OutputStream交换数据。
    • BluetoothServerSocket:代表一个开放的服务器socket,它监听接受的请求(与TCP ServerSocket类似)。为了连接两台Android设备,一个设备必须使用这个类开启一个服务器socket。当一个远程蓝牙设备开始一个和该设备的连接请求,BluetoothServerSocket将会返回一个已连接的BluetoothSocket,接受该连接。

BLE:

  • BluetoothGatt:继承BluetoothProfile,通过BluetoothGatt可以连接设备(connect),发现服务(discoverServices),并把相应地属性返回到BluetoothGattCallback,可以看成蓝牙设备从连接到断开的生命周期。
  • BluetoothGattCharacteristic:相当于一个数据类型,可以看成一个特征或能力,它包括一个value和0~n个value的描述(BluetoothGattDescriptor)。
  • BluetoothGattDescriptor:描述符,对Characteristic的描述,包括范围、计量单位等。
  • BluetoothGattService:服务,Characteristic的集合。
  • BluetoothGattCallback:已经连接上设备,对设备的某些操作后返回的结果。

3)功能的实现:

经典模式:

1>. 获取蓝牙适配器:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

2>.判断蓝牙是否打开,并监听蓝牙打开状态

if (!mBluetoothAdapter.isEnabled()) {  

       //若没打开则打开蓝牙  

       mBluetoothAdapter.enable();  

      }

IntentFilter btoothFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);

      registerReceiver(btoothWifiBrocast, btoothFilter);

      class BtoothWifiBrocast extends BroadcastReceiver {

        @Override

        public void onReceive(Context context, Intent intent) {

            String action = intent.getAction();

            if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {

                int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);

                switch (blueState) {

                    case BluetoothAdapter.STATE_TURNING_ON:

                        ToastUtil.showShort("蓝牙打开中...");

                        break;

                    case BluetoothAdapter.STATE_ON:

                        ToastUtil.showShort("蓝牙已打开");

                        llBtoothInfo.setVisibility(View.VISIBLE);

                        getBluetoothList();

                        break;

                    case BluetoothAdapter.STATE_TURNING_OFF:

                        ToastUtil.showShort("蓝牙关闭中...");

                        break;

                    case BluetoothAdapter.STATE_OFF:

                        ToastUtil.showShort("蓝牙已关闭");

                        llBtoothInfo.setVisibility(View.INVISIBLE);

                        break;

                    default:

                        break;

                }

            }

        }

    }  

3&g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值