首页 > 解决方案 > React Native:空引用上的'android.bluetooth.bluetoothadapter.isEnabled()'

问题描述

我正在开发一个依赖蓝牙来实现其某些功能的 React-Native 应用程序,据我了解,Android Studio 的模拟器不支持蓝牙。我正在使用的包是react-native-eddystone,它用于与蓝牙低功耗设备一起使用。当我在手机上启动应用程序时,它会提示我允许使用蓝牙并且工作正常,但是当我使用模拟器时它从一开始就崩溃了。这是AndroidManifets.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

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

    <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>

这是错误的屏幕截图:

在此处输入图像描述

编辑:错误发生在 EddystoneModule.java 中:

  @ReactMethod
  public void startScanning() {
    ScanFilter serviceFilter = new ScanFilter.Builder().setServiceUuid(SERVICE_UUID).build();

    ScanFilter configurationFilter = new ScanFilter.Builder().setServiceUuid(CONFIGURATION_UUID).build();

    final List<ScanFilter> filters = new ArrayList<>();
    filters.add(serviceFilter);
    filters.add(configurationFilter);

    ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();

    if (!bluetoothAdapter.isEnabled()) { // <--- here bluethoothAdapter is null
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      getCurrentActivity().startActivityForResult(enableBtIntent, 8123);
    }

    // start scanning
    scanner = bluetoothAdapter.getBluetoothLeScanner();
    scanner.startScan(filters, settings, scanCallback);
  }

标签: reactjsreact-nativereact-native-androideddystone

解决方案


推荐阅读