我正在创建一个 react-native 应用程序,在该应用程序中我需要从用户那里获得访问权限coarse-location和fine-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”