有什么简化权限检查的方法吗?

时间:2016-07-08 11:36:22

标签: android optimization permissions

我目前正在使用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语句检查。

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

修改 我注意到我得到了投票。我不太清楚你为什么要投票,因为你还没有发表任何评论......如果你能评论为什么这个问题无效,请解释。

3 个答案:

答案 0 :(得分:2)

在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(); } } }
  4. 因此,您每次都没有为单一权限编写所有代码,因此您只需编写一次并使用OOP功能/功能。

答案 1 :(得分:1)

答案 2 :(得分:0)

查看Github回购。

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

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

功能

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