2

我正在创建一个 react-native 应用程序,在该应用程序中我需要从用户那里获得访问权限coarse-locationfine-location. 我在 android 中制作了一个 Native Module,并为此使用了新的 Activity Result API ActivityResultContracts.RequestMultiplePermissions

我在 build.grade 中添加了以下内容

implementation "androidx.activity:activity:1.2.3"

我已将 ActivityResultLauncher 声明为 NativeModule 类的成员变量。

private ActivityResultLauncher<String[]> requestPermissionLauncher =
    registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), permissions -> {
        Log.d(TAG, "result launcher permissions : " + permissions);
    });
private boolean checkLocationPermission() {
int isFineLocationPermissionGanted = ContextCompat.checkSelfPermission(getReactApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION);
int isCoarseLocationPermissionGanted = ContextCompat.checkSelfPermission(getReactApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION);
return isFineLocationPermissionGanted == PackageManager.PERMISSION_GRANTED && isCoarseLocationPermissionGanted == PackageManager.PERMISSION_GRANTED;
}

private void askLocationPermission() {
if(checkLocationPermission()) {
    // location permission is already there
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Activity activity = getCurrentActivity();
        if (Objects.requireNonNull(activity).shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION) ||
                Objects.requireNonNull(activity).shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_COARSE_LOCATION)) {
            showMessageOKCancel("Please grant location access which is required to search for devices via bluetooth.", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.d(TAG, "onClick: inside onclick yes");
                    requestPermissionLauncher.launch(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION});
                }
            });
        } else {
            requestPermissionLauncher.launch(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION});
        }
    }
}

我正在检查并请求上述功能的许可。我打算在我的 react-native 屏幕中的 useEffect 挂钩中从我的 react-native 代码中调用askLocationPermission()函数。ReactMethod

我面临的问题是 android 无法找到 registerForActivityResult() 函数,并且在运行时出现以下错误npx react-native run-android

无法解析“BLEDeviceScanModule”中的方法“registerForActivityResult”

4

0 回答 0