【问题标题】:Any way to simplify permission checks?有什么方法可以简化权限检查?
【发布时间】:2017-01-20 17:05:47
【问题描述】:

我目前正在使用 Android Studio 中的权限。

我检查了教程是如何做到的,我发现它真的很讨厌而且很长。当前代码是这样的:

    String[] InternetPermission = new String[]{Manifest.permission.INTERNET};
    if (ContextCompat.checkSelfPermission(ViewingWindow.this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(ViewingWindow.this,
                Manifest.permission.INTERNET)) {
            InternetExplanation();
        } else {
            ActivityCompat.requestPermissions(ViewingWindow.this,
                    new String[]{Manifest.permission.INTERNET},
                    MY_PERMISSIONS_REQUEST_INTERNET);
        }

    }

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_INTERNET: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] != PackageManager.PERMISSION_GRANTED){
                this.finishAffinity();
            }
        }
    }
}

在我看来,这对于单个权限检查来说显然相当长。我一直想知道为什么整个权限检查不是简单的 if 语句检查。

权限检查有这么长的原因吗?如果没有,有没有办法尝试优化它?

编辑: 我注意到我有反对票。我不太确定您为什么投了反对票,因为您也根本没有发表评论...如果您可以评论为什么这个问题无效,请解释一下。

【问题讨论】:

标签: android optimization permissions


【解决方案1】:

在 API 23 或 Android 6.0 中,我们必须征得用户的许可,您最好已经知道了。

如果用户需要单一权限,那么您必须向用户提出要求

  1. 首先你检查天气应用程序已经有权限所以ContextCompat.checkSelfPermission(ViewingWindow.this, Manifest.permission.INTERNET)这条线会出现。
  2. 如果应用没有,那么我们要求ActivityCompat.requestPermissions(ViewingWindow.this, new String[]{Manifest.permission.INTERNET}, MY_PERMISSIONS_REQUEST_INTERNET); 出现此行。
  3. 最后你有回调来检查天气用户授予/拒绝的权限我们接受我们创建下一个行为所以public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_INTERNET: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED){ this.finishAffinity(); } } }

因此您不必每次都为单一权限编写所有代码,因此您只需编写一次并使用 OOP 功能/功能。

【讨论】:

  • 呃,太糟糕了。那么,我将不得不通过它。感谢您的回答!
【解决方案2】:

【讨论】:

    【解决方案3】:

    查看 Github 存储库。

    https://github.com/anshulagarwal06/Simplify-Permissions

    它易于使用并支持所有对话框检查。

    功能

    带有自定义消息的 InBuild Rational 对话框 带有自定义消息的 InBuild SettingScreen 对话框。 权限状态回调: 许可授予 已删除权限 权限访问已删除。

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多