2017-04-26 108 views
6

我正在编写代码以在组中请求多个Run time permission on android 6.0。一切都很好,我遵循一些很好的例子,但仍然有问题。允许多次运行时间权限

ActivityCompat.shouldShowRequestPermissionRationale (context, READ_PHONE_STATE)其上下文中给出的错误 错误的第一个参数上下文。请帮助如何解决它。

由于提前

代码是:

if (ContextCompat 
        .checkSelfPermission(SpalshActivity.this, 
          READ_PHONE_STATE)+ContextCompat.checkSelfPermission(context, 
        WRITE_EXTERNAL_STORAGE) +ContextCompat.checkSelfPermission(context, 
        CAMERA) + ContextCompat 
        .checkSelfPermission(context, 
          READ_CONTACTS)+ContextCompat 
        .checkSelfPermission(context, 
          CALL_PHONE)+ContextCompat 
        .checkSelfPermission(context, 
          ACCESS_FINE_LOCATION)+ContextCompat 
        .checkSelfPermission(context, 
          READ_SMS)== PackageManager.PERMISSION_GRANTED) { 
       myMethod(); 

      } 
       else { 
       if (ActivityCompat.shouldShowRequestPermissionRationale 
         (context, READ_PHONE_STATE) ||ActivityCompat.shouldShowRequestPermissionRationale 
         (context, WRITE_EXTERNAL_STORAGE)|| 
         ActivityCompat.shouldShowRequestPermissionRationale 
           (context, CAMERA) || 
         ActivityCompat.shouldShowRequestPermissionRationale 
           (context, READ_CONTACTS) || ActivityCompat.shouldShowRequestPermissionRationale 
         (context, CALL_PHONE) || ActivityCompat.shouldShowRequestPermissionRationale 
         (context, ACCESS_FINE_LOCATION) || ActivityCompat.shouldShowRequestPermissionRationale 
         (context, READ_SMS)) { 
        Snackbar.make(findViewById(android.R.id.content), 
          "Please Grant Permissions", 
          Snackbar.LENGTH_INDEFINITE).setAction("ENABLE", 
          new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            ActivityCompat.requestPermissions(SpalshActivity.this, 
              new String[]{READ_PHONE_STATE,WRITE_EXTERNAL_STORAGE,CAMERA, READ_CONTACTS, CALL_PHONE, ACCESS_FINE_LOCATION, READ_SMS}, 
              REQUEST_READ_PHONE_STATE); 
           } 
          }).show(); 
       } else { 
        ActivityCompat.requestPermissions(SpalshActivity.this, 
          new String[]{READ_PHONE_STATE,WRITE_EXTERNAL_STORAGE,CAMERA, READ_CONTACTS, CALL_PHONE, ACCESS_FINE_LOCATION, READ_SMS}, 
          REQUEST_READ_PHONE_STATE); 
       } 
      } 
      } 

    } 
+1

尝试yourActivity.this而不是上下文。 –

回答

6

第一个参数是android.app.Activity类型,你不能在这个地方通过context所以使用this,而不是像context下面的代码: -

if (ActivityCompat.shouldShowRequestPermissionRationale 
         (this, READ_PHONE_STATE) ||ActivityCompat.shouldShowRequestPermissionRationale 
         (this, WRITE_EXTERNAL_STORAGE)|| 
         ActivityCompat.shouldShowRequestPermissionRationale 
           (this, CAMERA) || 
         ActivityCompat.shouldShowRequestPermissionRationale 
           (this, READ_CONTACTS) || ActivityCompat.shouldShowRequestPermissionRationale 
         (this, CALL_PHONE) || ActivityCompat.shouldShowRequestPermissionRationale 
         (this, ACCESS_FINE_LOCATION) || ActivityCompat.shouldShowRequestPermissionRationale 
         (this, READ_SMS)) 
0

尝试更换context with this

if (ActivityCompat.shouldShowRequestPermissionRationale(this, READ_PHONE_STATE) || 
    ActivityCompat.shouldShowRequestPermissionRationale(this, WRITE_EXTERNAL_STORAGE) || 
    ActivityCompat.shouldShowRequestPermissionRationale(this, CAMERA) || 
    ActivityCompat.shouldShowRequestPermissionRationale(this, READ_CONTACTS) || 
    ActivityCompat.shouldShowRequestPermissionRationale(this, CALL_PHONE) || 
    ActivityCompat.shouldShowRequestPermissionRationale(this, ACCESS_FINE_LOCATION) || 
    ActivityCompat.shouldShowRequestPermissionRationale(this, READ_SMS)) { 
    //... 
}