在我的应用程序中,我在oncreate()函数中请求如下权限
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_GRANTED)
registerListener(context);
else if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.ACTIVITY_RECOGNITION))
new AlertDialog.Builder(context)
.setTitle("Permission required")
.setMessage("This permission is required to fetch the sensor data from your phone, denying it will cause the app to exit")
.setPositiveButton("Give permission", (dialog, which) -> ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, ACTIVITY_REQUEST_CODE))
.setNegativeButton("Deny", (dialog, which) -> ((Activity) context).finish())
.show();
else
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, ACTIVITY_REQUEST_CODE);
这是onrequestpermissionsresult重写的方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == presenter.ACTIVITY_REQUEST_CODE)
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
presenter.registerListener(this);
else {
Toast.makeText(this, "Permission denied, exiting", Toast.LENGTH_LONG).show();
finish();
}
}
现在我面临的问题是,我得到了适当的弹出窗口请求许可,但我看到了祝酒词的消息( Permission denied, exiting
)在我做出选择之前 finish()
方法在我做出选择之前调用应用程序退出!
我不知道为什么会这样,任何帮助都是非常感谢的!
3条答案
按热度按时间oalqel3c1#
事实上
onRequestPermissionsResult
被称为完美的预期。你必须在它体内处理这个案子。你的问题是Activity
完成之前dialog
打开来做任何选择。所以,试着评论一下finish()
方法内部onRequestPermissionsResult
. 请看下面的代码以获得更好的清晰度。在代码的以下部分处理用户拒绝情况:
guz6ccqo2#
解决方案就在这里
使用dexter让你的生活更轻松
(1) 在build.grade(应用程序级别)文件中添加以下依赖项
(2) 现在就用它。。
qkf9rpyu3#
我建议,与其创建一个对话框,不如让android来弥补。检查是否授予权限
然后请求许可
检查是否授予权限
当你想查看权限的时候就叫这个