【发布时间】:2020-08-19 09:36:55
【问题描述】:
我有MapFragment,我在onViewCreated检查权限:
if (uiCommunicationListener.isLocationPermissionGranted()) {
permission_button.visibility = View.GONE
val mapFragment =
childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(callback)
} else {
//Hide Map
}
uiCommunicationListener是负责fragments-activity通信的接口。
isLocationPermissionGranted 位于MainActivity,如下所示:
override fun isLocationPermissionGranted(): Boolean {
if (ContextCompat.checkSelfPermission(
this,
android.Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED) {
// Ask for permission
ActivityCompat.requestPermissions(
this,
arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
Constants.LOCATION_PREMMISION_CODE
)
return false
} else {
// Permission has already been granted
return true
}
基本上它是检查是否授予权限,如果是返回true,如果不是请求权限并返回false。
问题是在我们向他请求权限后,我无法根据用户操作进行操作。
在我的情况下,我正在检查是否已授予权限,如果不隐藏地图则显示地图。
但是如果它返回 false,并且在请求权限对话框弹出并且用户授予我们权限后,什么都不会发生,因为我们已经“通过”了 if 检查
现在通常在onRequestPermissionsResult 方法中,我可以根据用户操作进行操作(授予我们权限/拒绝请求)但是这里这个方法存在于 MainActivity 中,我无法访问请求代码、授予结果等。
如何根据请求权限对话框的结果在fragment中进行操作?
【问题讨论】:
标签: android kotlin android-fragments android-permissions android-fragmentactivity