我正在开发一个应用程序,其主要功能是在地图上查看数据。
为此,我需要获取当前位置,为此,我向用户请求。
但如果用户拒绝权限,那么……
如果用户拒绝了“永不再问”选项的权限,那么您的 onRequestPermissionsResult 方法会永远调用自己,直到它抛出 StackOverFlowError 。
onRequestPermissionsResult
StackOverFlowError
这里最好的办法就是不要再获得许可了 onRequestPermissionsResult 方法一旦用户否认它。您可以禁用该功能,也可以打开应用的权限设置,并使用以下代码手动更改权限设置。
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case LOCATION_PERMISSION_REQUEST_CODE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { enableMyLocationIfPermitted(); } else { Toast.makeText(this, getResources().getText(R.string.you_need_permissions), Toast.LENGTH_LONG).show(); Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); } return; } } }
如果您想了解有关权限的更多信息 https://developer.android.com/training/permissions/requesting 这是一个很好的指南。
的 堆栈溢出 强> - >这通常意味着您在代码中进行了递归调用。递归只是一个调用自身的方法,导致堆栈溢出并抛出StackoverFlow异常。
如果用户拒绝许可,可能应用程序不会再次询问用户。然后这个流程就像无限循环一样。当你超过堆栈大小时,你会崩溃
如果用户拒绝权限意味着用户不想与您的应用程序共享他/她的数据,那么为什么您要反复询问它,这对用户来说很烦人,您只需发出消息让用户知道您为什么要求权限和如果拒绝用户无法使用应用程序的特定功能,仍然要反复请求权限,只需要在用户拒绝时显示对话框并提示“请允许此权限以进一步使用应用程序” 当用户再次按下ok show permission对话框时。