Android在授予权限后要求每个权限三次并关闭应用程序

问题描述:

我正在创建一个简单的应用程序,其中需要READ_CONTACT和CALL_PHONE权限。我写了下面的代码。Android在授予权限后要求每个权限三次并关闭应用程序

安装应用程序后,需要经过许可,3次这样的 -

1 of 2 read contacts 
2 of 2 call and manage phone 


1 of 2 read contacts 
2 of 2 call and manage phone 


1 of 2 read contacts 
2 of 2 call and manage phone 

还授予这些权限的应用程序简化版,开放后。但是当我再次打开应用程序时,它可以正常工作,并且不再需要权限。

我有下面的代码

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 
     case MULTIPLE_REQUESTS: { 
      if (grantResults.length > 0) { 
       boolean contactPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED; 
       boolean phonePermission = grantResults[0] == PackageManager.PERMISSION_GRANTED; 

       if (contactPermission && phonePermission) { 
        // write your logic here 
       } else { 
        Toast.makeText(this, "Read Contact & Call phone permissions are required", Toast.LENGTH_SHORT).show(); 
        closeNow(); 
       } 
      } 
      break; 
     } 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Here, thisActivity is the current activity 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) 
      + ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) 
      != PackageManager.PERMISSION_GRANTED) { 

     if (ActivityCompat.shouldShowRequestPermissionRationale 
       (this, Manifest.permission.READ_CONTACTS) || 
       ActivityCompat.shouldShowRequestPermissionRationale 
         (this, Manifest.permission.CALL_PHONE)) { 

     } else { 
      // No explanation needed, we can request the permission. 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.CALL_PHONE}, 
        MULTIPLE_REQUESTS); 
     } 


    } 

    setContentView(R.layout.activity_contact_app_bar); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    toolbar.setTitle(getTitle()); 

} 
+0

在'OnCreate'中请求权限可能不是一个好主意。该活动尚未运行。 – Kuffs

+0

那么何时询问权限? –

+0

理想情况下,在您需要使用您请求的权限之前,但至少在您的活动开始时(在“OnResume”之后) – Kuffs

试试这个代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     ActivityCompat.requestPermissions(this, 
      new String[]{ Manifest.permission.READ_CONTACTS, Manifest.permission.CALL_PHONE}, 
      MULTIPLE_REQUESTS); 
    } 

添加上面的代码,你要允许

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MULTIPLE_REQUESTS: { 
      for (int i = 0; i < grantResults.length; i++) { 
       if (grantResults[i] != 
           PackageManager.PERMISSION_GRANTED) { 
        // Permission has been denied by user 
       } else { 
        // Permission has been granted by user 
       } 
       return; 
      } 
     } 
    } 
} 

当你调用相应功能的权限应该问。

我怀疑应用程序由于closeNow被调用而关闭。

您需要调试以下代码。

if(grantResults.length> 0){ boolean contactPermission = grantResults [1] == PackageManager.PERMISSION_GRANTED; boolean phonePermission = grantResults [0] == PackageManager.PERMISSION_GRANTED;

  if (contactPermission && phonePermission) { 
       // write your logic here 
      } else { 
       Toast.makeText(this, "Read Contact & Call phone permissions are required", Toast.LENGTH_SHORT).show(); 
       closeNow(); 
      } 
     }