Android蓝牙系列——基础api和获取本地蓝牙名称地址

一.摘要

Android智能硬件前几年一直不温不火的,到了现在却热火朝天了,各种智能手环,智能手表,智能家居等,而使用BLE这个方向也越来越多,而这方面的资料却是真的很少,可以说少得可怜,所以也打算往这块深入学习一下,有兴趣的可以一起学习!

二.新建工程BLEDemo

Android蓝牙系列——基础api和获取本地蓝牙名称地址_第1张图片

三.蓝牙权限

要想使用蓝牙,权限是少不了的

四.蓝牙API

Android蓝牙系列——基础api和获取本地蓝牙名称地址_第2张图片

android所有关于蓝牙开发的类都在android.bluetooth包下

1.BluetoothAdapter

蓝牙适配器,获取本地蓝牙,常用的方法有:

//开始搜索

startDiscovery()

//取消搜索

cancelDiscovery()

//直接打开蓝牙

enable()

//直接关闭蓝牙

disable()

//弹窗申请权限打开蓝牙

Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enabler,reCode);

//获得本地蓝牙名字

getName()

//本地蓝牙地址

getAddress()

//获取本地蓝牙适配器

getDefaultAdapter()

//根据蓝牙地址获取远程蓝牙设备

getRemoteDevice(String address)

//获取本地蓝牙适配器当前状态

getState()

//判断当前是否正在查找设备

isDiscovering()

//判断蓝牙是否打开

isEnabled()

//根据名称,UUID创建并返回BluetoothServerSocket

listenUsingRfcommWithServiceRecord(String name,UUID uuid)

2.BluetoothClass

远程蓝牙设备,同BluetoothAdapter类似,有诸多相同的api,包括getName,getAddress,但是他是获取已经连接设备的信息的,相同的方法就不说了,说个不同

//根据UUID创建并返回一个BluetoothSocket

createRfcommSocketToServiceRecord(UUIDuuid)

3.BluetoothServerSocket

看到Socket,你就大致知道这个玩意是干嘛的了,他和我们Android上的Socket用法还有点类似,我们来看一下常用的方法

//区别:后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!

accept()

accept(inttimeout)

//关闭通信

close()

4.BluetoothSocket

他和上面那个相反,他没有Server,就代表他是客户端,看看他有哪些常用的方法

//连接

connect()

//关闭

close()

//获取输入流

getInptuStream()

//获取输出流

getOutputStream()

//获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备

getRemoteDevice()

其他几个倒是不怎么用到

5.BluetoothClass.Device

6.BluetoothClass.Device.Major

7.BluetoothClass.Service

8.BluetoothDevice

五.搭建蓝牙环境

这里指的不是说要下载什么,只是我们运用蓝牙的时候需要做的一些准备

package com.lgl.bledemo;

import android.bluetooth.BluetoothAdapter;

import android.content.Intent;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private BluetoothAdapter mBluetoothAdapter;

private static final int REQUEST_ENABLE = 1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取本地蓝牙适配器

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

//判断是否硬件支持蓝牙

if (mBluetoothAdapter == null) {

Toast.makeText(this, "本地蓝牙不可用", Toast.LENGTH_SHORT).show();

//退出应用

finish();

}

//判断是否打开蓝牙

if (!mBluetoothAdapter.isEnabled()) {

//弹出对话框提示用户是后打开

Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(intent, REQUEST_ENABLE);

//不做提示,强行打开

// mBluetoothAdapter.enable();

}

//获取本地蓝牙名称

String name = mBluetoothAdapter.getName();

//获取本地蓝牙地址

String address = mBluetoothAdapter.getAddress();

//打印相关信息

Log.i("BLE Name", name);

Log.i("BLE Address", address);

}

}

好的,这样就可以获取到相关信息了

你可能感兴趣的:(Android蓝牙系列——基础api和获取本地蓝牙名称地址)