如何在Android中获取蓝牙公共地址

概述

本文将教会你如何在Android设备上获取蓝牙的公共地址。首先,我们将提供一个流程图,展示整个获取蓝牙公共地址的过程。然后,我们将逐步解释每一步所需要做的事情,并给出相应的代码示例。

流程图

graph TD
A[开始] --> B[检查蓝牙权限]
B --> C{是否有蓝牙权限}
C -->|是| D[初始化BluetoothAdapter]
C -->|否| E[请求蓝牙权限]
E --> F{蓝牙权限是否被授予}
F -->|是| D
F -->|否| G[提示用户授予权限]
G --> E
D --> H{蓝牙是否开启}
H -->|是| I[获取蓝牙地址]
H -->|否| J[打开蓝牙]
J --> H
I --> K[显示蓝牙地址]
K --> L[结束]

步骤和代码示例

第一步:检查蓝牙权限

在AndroidManifest.xml文件中添加以下权限:

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

第二步:初始化BluetoothAdapter

在你的Activity或Fragment中添加以下代码:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

第三步:检查蓝牙权限是否被授予

if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED
        && ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN) == PackageManager.PERMISSION_GRANTED) {
    // 权限已被授予
} else {
    // 请求蓝牙权限
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN}, REQUEST_BLUETOOTH_PERMISSION);
}

第四步:提示用户授予权限

如果蓝牙权限没有被授予,我们需要向用户显示一个解释框,请求他们授予蓝牙权限。在你的Activity中添加以下代码:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQUEST_BLUETOOTH_PERMISSION) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            // 用户已授予蓝牙权限
            // 继续下一步
        } else {
            // 用户拒绝了蓝牙权限
            // 提示用户授予权限
        }
    }
}

第五步:检查蓝牙是否开启

if (bluetoothAdapter.isEnabled()) {
    // 蓝牙已开启
    // 继续下一步
} else {
    // 打开蓝牙
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BLUETOOTH);
}

第六步:获取蓝牙地址

String bluetoothAddress = bluetoothAdapter.getAddress();

第七步:显示蓝牙地址

TextView textView = findViewById(R.id.addressTextView);
textView.setText(bluetoothAddress);

状态图

stateDiagram
    [*] --> 未初始化
    未初始化 --> 已初始化: 初始化BluetoothAdapter
    已初始化 --> 已授权: 检查蓝牙权限
    已授权 --> 蓝牙开启: 检查蓝牙状态
    蓝牙开启 --> 获取地址: 蓝牙已开启
    获取地址 --> 显示地址: 获取成功
    显示地址 --> [*]: 结束
    蓝牙开启 --> 蓝牙未开启: 蓝牙未开启
    蓝牙未开启 --> 打开蓝牙: 请求用户打开蓝牙
    打开蓝牙 --> 蓝牙开启: 用户已打开蓝牙
    已授权 --> 未授权: 蓝牙权限未被授予
    未授权 --> 请求权限: