Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址

简介: <div class="markdown_views"><h1 id="android-ble与终端通信一android-bluetooth基础api以及简单使用获取本地蓝牙名称地址">Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址</h1><hr><blockquote> <p>Hello,工

Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址


Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端通信技术,无奈一直心不在此,但是真当自己要使用的时候还是比较迷茫,所以最近也有意向来学习这一块,同时,把自己的学习经历分享出来

一.摘要

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

二.新建工程BLEDemo

这里写图片描述

三.蓝牙权限

要想使用蓝牙,权限是少不了的
 <uses-permission android:name="android.permission.BLUETOOTH"/>
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

四.蓝牙API

这里写图片描述
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);
    }
}
好的,这样就可以获取到相关信息了

这篇算是一个开头,毕竟是由浅到深,我们慢慢来,Demo的话,就算了,代码都贴出来了,记得添加权限哦,我们下一篇就开始讲搜索和连接了

Demo下载:http://download.csdn.net/detail/qq_26787115/9413448

Android BLE与终端通信(二)——Android Bluetooth基础搜索蓝牙设备显示列表

目录
相关文章
|
2月前
|
自然语言处理 算法 Java
地址描述转换为坐标点不使用API,有什么转换的方法?
地址描述转换为坐标点不使用API,有什么转换的方法?
283 64
|
12天前
|
API
获取网页重定向地址免费API接口教程
该API用于获取网页重定向跳转后的最终地址。请求地址为`https://cn.apihz.cn/api/wangzhan/tiaozhuan.php`,支持POST或GET方式。请求参数包括`id`、`key`和`url`,返回数据包含状态码`code`和最终URL`url`。示例返回:`{&quot;code&quot;:200,&quot;url&quot;:&quot;https://www.baidu.com/&quot;}`。
57 29
|
3月前
|
API 网络架构 开发者
【Azure API 管理】APIM服务资源删除后,为什么不能马上创建相同名称的APIM服务呢?
【Azure API 管理】APIM服务资源删除后,为什么不能马上创建相同名称的APIM服务呢?
|
15天前
|
API
天气预报-腾讯天气-7天-地址查询版免费API接口
这是一个免费的腾讯天气API接口,用于查询指定地址的7天天气预报。支持POST和GET请求方式。请求参数包括id、key、province、city、county等。返回参数包含日期、天气状况、温度等信息。 示例请求地址:https://cn.apihz.cn/api/tianqi/tengxun.php?id=88888888&key=88888888&province=四川省&city=绵阳市&county=。
|
23天前
|
存储 JSON API
淘宝API接口实战:高效获取商品标题、分类及店铺名称
在淘宝API接口实战中,通过以下步骤高效获取商品标题、分类及店铺名称:1. 准备工作:了解淘宝开放平台文档,注册开发者账号,选择开发语言和工具。2. 获取API访问权限:申请相应权限,提供应用场景说明。3. 调用API接口:构建HTTP请求,提供必要参数。4. 解析响应数据:提取JSON数据中的所需信息。5. 数据处理和存储:进一步处理并存储数据。6. 注意事项:遵守使用规范,注意调用频率和数据安全。示例代码使用Python调用淘宝API。
|
1月前
|
IDE API 定位技术
Python--API编程:IP地址翻译成实际的物理地址
Python--API编程:IP地址翻译成实际的物理地址
|
3月前
|
API 网络架构
【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称
【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称
|
3月前
|
XML Android开发 数据格式
Android实战经验之Kotlin中快速实现动态更改应用图标和名称
本文介绍在Android中通过设置多个活动别名动态更改应用图标和名称的方法,涉及XML配置及Kotlin代码示例。
162 10
|
3月前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
239 4
|
3月前
|
Kubernetes 监控 API
在k8S中,各模块如何与API Server进行通信的?
在k8S中,各模块如何与API Server进行通信的?