You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Android平台React Native应用中运行Java蓝牙适配器功能?如何实现?

React Native Android集成Java蓝牙适配器功能方案

可行性说明

完全可行。React Native(RN)原生支持通过原生模块桥接机制调用Android平台的Java代码,蓝牙适配器属于Android系统核心API,直接通过自定义原生模块即可实现调用。

实现步骤(含环境搭建)

1. 创建Android原生蓝牙模块

打开RN项目的android/app/src/main/java/[你的项目包名]/目录,新建BluetoothModule.java文件,实现蓝牙基础功能:

package com.yourappname; // 替换为你的项目包名

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.app.Activity;

public class BluetoothModule extends ReactContextBaseJavaModule {
    private BluetoothAdapter bluetoothAdapter;

    public BluetoothModule(ReactApplicationContext reactContext) {
        super(reactContext);
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    }

    @Override
    public String getName() {
        return "BluetoothModule"; // JS端调用的模块标识名
    }

    // 检查设备是否支持蓝牙
    @ReactMethod
    public void isBluetoothSupported(Promise promise) {
        promise.resolve(bluetoothAdapter != null);
    }

    // 请求开启蓝牙
    @ReactMethod
    public void enableBluetooth(Promise promise) {
        if (bluetoothAdapter == null) {
            promise.reject("UNSUPPORTED", "设备不支持蓝牙");
            return;
        }
        if (!bluetoothAdapter.isEnabled()) {
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            Activity currentActivity = getCurrentActivity();
            if (currentActivity != null) {
                currentActivity.startActivityForResult(enableBtIntent, 1);
                promise.resolve(true);
            } else {
                promise.reject("NO_ACTIVITY", "未找到当前Activity");
            }
        } else {
            promise.resolve(true);
        }
    }
}

2. 注册原生模块

同目录下新建BluetoothPackage.java,用于向RN注册上述模块:

package com.yourappname;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class BluetoothPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new BluetoothModule(reactContext));
        return modules;
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}

3. 在RN应用中注册Package

修改android/app/src/main/java/[你的项目包名]/MainApplication.java的getPackages方法:

@Override
protected List<ReactPackage> getPackages() {
    List<ReactPackage> packages = new PackageList(this).getPackages();
    // 添加自定义蓝牙Package
    packages.add(new BluetoothPackage());
    return packages;
}

4. 配置蓝牙权限

在android/app/src/main/AndroidManifest.xml中添加权限声明:

<!-- 基础蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Android 12+ 新增权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 声明设备蓝牙硬件支持 -->
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />

5. JS端调用原生模块

在RN的JS组件中引入并调用蓝牙模块:

import { NativeModules, Alert, PermissionsAndroid } from 'react-native';
const { BluetoothModule } = NativeModules;

// 动态申请蓝牙权限(Android 6+ 必需)
const requestBluetoothPermissions = async () => {
  const permissions = [
    PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
    PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
  ];
  const granted = await PermissionsAndroid.requestMultiple(permissions);
  return granted[PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN] === PermissionsAndroid.RESULTS.GRANTED &&
         granted[PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT] === PermissionsAndroid.RESULTS.GRANTED;
};

// 检查蓝牙支持状态
const checkBluetoothSupport = async () => {
  try {
    const isSupported = await BluetoothModule.isBluetoothSupported();
    Alert.alert(isSupported ? '设备支持蓝牙' : '设备不支持蓝牙');
  } catch (error) {
    console.error(error);
  }
};

// 请求开启蓝牙
const enableBluetooth = async () => {
  const hasPermission = await requestBluetoothPermissions();
  if (!hasPermission) {
    Alert.alert('权限不足', '请授予蓝牙相关权限');
    return;
  }
  try {
    await BluetoothModule.enableBluetooth();
    Alert.alert('蓝牙开启请求已发送');
  } catch (error) {
    Alert.alert('错误', error.message);
  }
};

常见问题排查

  • 环境搭建失败:确保Android Studio已安装,ANDROID_HOME环境变量配置正确,RN版本与gradle版本兼容(可参考RN官方文档的版本对应表)。
  • 模块无响应:检查Java文件的包名是否与项目包名一致,MainApplication是否正确添加了BluetoothPackage,JS端调用的模块名是否与getName()返回值一致。
  • 权限失效:Android 12+必须动态申请BLUETOOTH_SCAN和BLUETOOTH_CONNECT权限,仅静态声明无效。

内容的提问来源于stack exchange,提问作者Atharva Solaskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:46:08