2017-06-02 48 views
0

我正在开发一个应用程序,其中写入内部存储的权限至关重要。当我请求api> 23的权限时,有一个选项不会再次显示请求权限对话框。我想禁用这个功能,因为如果用户选择拒绝并检查再也不显示请求对话框,那么用户将不得不亲自去设置并清除我自己想要避免的应用程序引用。如果用户选择拒绝,我也希望继续请求权限,但是会在grantResults [0]中导致错误java.lang.ArrayIndexOutOfBoundsException。如何让用户必须允许某些权限才能继续使用应用程序

总结我的问题: 1.如何禁用“从不显示再次检查” 2.我的错误的修复

这是我再次请求权限,如果用户选择拒绝代码:

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_WRITE_EXTERNAL_STORAGE: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Update(); 
      } else { 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_WRITE_EXTERNAL_STORAGE); 
      } 
      break; 
    } 
} 
+1

虽然我不认为这是不可能的,但有一个原因是android开发人员已经在外部存储上实现了锁定以及对权限的“再也不问”功能。很可能,如果没有找到解决方法的办法,你就不会有解决这个问题的办法。这可能是值得考虑的,为什么你有这个问题,并看看是否有一种方法来实现你想要的,而不是试图去违背Android的功能。 –

回答

2

无法从永久拒绝许可停止用户。当用户执行需要权限的操作,并且权限被拒绝时,可以刷新消息 - 例如Toast或Snackbar。

1

试试这个我的朋友

String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE; 
    int grant = ContextCompat.checkSelfPermission(this, permission); 
    if (grant != PackageManager.PERMISSION_GRANTED) { 
     String[] permission_list = new String[1]; 
     permission_list[0] = permission; 
     ActivityCompat.requestPermissions(this, permission_list, 1); 
    } 



@Override 
    public void onRequestPermissionsResult (int requestCode, @NonNull String[] permissions, 
    @NonNull int[] grantResults){ 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if (requestCode == 1) { 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(AccountClass.this, "permission granted", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(AccountClass.this, "permission not granted", Toast.LENGTH_SHORT).show(); 
      } 
     } 

    } 
+0

感谢您的回答,但在分析我的问题后,我发现最好是显示对话框,以便为什么需要权限而不是上面的回答。 – user3576118

相关问题