Java 请求许可

Java 请求许可,java,android,react-native,promise,react-native-android,Java,Android,React Native,Promise,React Native Android,我有一个本地Java模块负责请求一些权限,并且我已经创建了一个桥来访问JavaScript中的这个方法。下面是react本机代码的相关部分 import { NativeModules, Platform } from 'react-native'; const CTModule = NativeModules.CTHandler as { requestPermissions: () => Promise<boolean>; arePermissionsGran

我有一个本地Java模块负责请求一些权限,并且我已经创建了一个桥来访问JavaScript中的这个方法。下面是react本机代码的相关部分

import { NativeModules, Platform } from 'react-native';
  
const CTModule = NativeModules.CTHandler as {
  requestPermissions: () => Promise<boolean>;
  arePermissionsGranted: () => Promise<boolean>;
  enableAndDiscoverableBluetooth: () => Promise<boolean>;
  startBluetoothService: () => Promise<boolean>;
};

export const enableCT = async () => {
  const areGranted = await CTModule.arePermissionsGranted();
  if (!areGranted) {
    await CTModule.requestPermissions();
  }
  await CTModule.enableAndDiscoverableBluetooth();
  await CTModule.startBluetoothService();
};
此代码调用帮助器模块的一些函数-
MainUtils
,代码如下:

public class MainUtils {

    public static boolean isBluetoothAvailable() {
        if(isBluetoothPermissionAvailable(MainApplication.getInstance().getApplicationContext())) {
            BluetoothAdapter bltAdapter = BluetoothAdapter.getDefaultAdapter();
            return bltAdapter != null &&
                   bltAdapter.isEnabled() &&
                   bltAdapter.getState() == BluetoothAdapter.STATE_ON;
        }
        return false;
    }

    public static boolean isBluetoothPermissionAvailable(Context context) {
        int blt = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH);
        int bltadmin = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_ADMIN);
        return (blt == PackageManager.PERMISSION_GRANTED && bltadmin == PackageManager.PERMISSION_GRANTED);
    }

    public static boolean isBTScanningServiceRunning() {
        return BTScanningService.serviceRunning;
    }

    public static void requestPermissions(
        Activity context, int permissionRequestCode
    ) {
        String[] PERMISSIONS = {
                Manifest.permission.BLUETOOTH,
                Manifest.permission.BLUETOOTH_ADMIN,
                Manifest.permission.ACCESS_COARSE_LOCATION,
        };
        ActivityCompat.requestPermissions(
                context,
                PERMISSIONS,
                permissionRequestCode
        );
    }

    public static boolean arePermissionsGranted(Context context) {
        int blt = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH);
        int bltadmin = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_ADMIN);
        int coarseLoc = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION);

        return (
                blt == PackageManager.PERMISSION_GRANTED
                && bltadmin == PackageManager.PERMISSION_GRANTED
                && coarseLoc == PackageManager.PERMISSION_GRANTED
        );
    }

}

您是否尝试添加catch块来检查承诺是否被拒绝(或者检查承诺是否根本没有得到解决)?
public class MainUtils {

    public static boolean isBluetoothAvailable() {
        if(isBluetoothPermissionAvailable(MainApplication.getInstance().getApplicationContext())) {
            BluetoothAdapter bltAdapter = BluetoothAdapter.getDefaultAdapter();
            return bltAdapter != null &&
                   bltAdapter.isEnabled() &&
                   bltAdapter.getState() == BluetoothAdapter.STATE_ON;
        }
        return false;
    }

    public static boolean isBluetoothPermissionAvailable(Context context) {
        int blt = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH);
        int bltadmin = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_ADMIN);
        return (blt == PackageManager.PERMISSION_GRANTED && bltadmin == PackageManager.PERMISSION_GRANTED);
    }

    public static boolean isBTScanningServiceRunning() {
        return BTScanningService.serviceRunning;
    }

    public static void requestPermissions(
        Activity context, int permissionRequestCode
    ) {
        String[] PERMISSIONS = {
                Manifest.permission.BLUETOOTH,
                Manifest.permission.BLUETOOTH_ADMIN,
                Manifest.permission.ACCESS_COARSE_LOCATION,
        };
        ActivityCompat.requestPermissions(
                context,
                PERMISSIONS,
                permissionRequestCode
        );
    }

    public static boolean arePermissionsGranted(Context context) {
        int blt = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH);
        int bltadmin = ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_ADMIN);
        int coarseLoc = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION);

        return (
                blt == PackageManager.PERMISSION_GRANTED
                && bltadmin == PackageManager.PERMISSION_GRANTED
                && coarseLoc == PackageManager.PERMISSION_GRANTED
        );
    }

}