2016-09-23 40 views
0

我正在为食物交付做一个应用程序。在我的应用程序,当用户使用Android手机版棉花糖,那么我的应用程序不会在第一时间要求读取短信的权限。但是当用户下次打开应用程序时,我的应用程序要求获得许可。我不知道是什么问题。我希望当用户第一次打开应用时,权限应该问第二次。我的应用程序首次不询问棉花糖的运行时权限?

这是我的要求,我在我的我的活动onCreate()方法调用此方法的认可方式:

private void permissionForMarshMallow() { 

     int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, 
       Manifest.permission.READ_SMS); 

     if (ContextCompat.checkSelfPermission(LoginActivity.this, 
       Manifest.permission.READ_SMS) 
       != PackageManager.PERMISSION_GRANTED) { 


      if (ActivityCompat.shouldShowRequestPermissionRationale(LoginActivity.this, 
        Manifest.permission.READ_SMS)) { 

       Log.e("permission...granted", "permission granted............"); 


      } else { 



       ActivityCompat.requestPermissions(LoginActivity.this, 
         new String[]{Manifest.permission.READ_SMS}, 
         REQUEST_CODE_ASK_SINGLE_PERMISSION); 


      } 
     } 
    } 

这也是覆盖方法onRequestPermissionsResult()

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 


     switch (requestCode) { 

      case REQUEST_CODE_ASK_SINGLE_PERMISSION: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       } else { 


        // Toast.makeText(LoginActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); 
       } 
       break; 
      default: 
       super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 


    } 

谁能告诉我怎样才能让它不是第一次要求获得许可的应用?

+0

什么是'''targetSdkVersion'''? –

+1

只需检查您的目标版本是否为22 –

+0

我推荐此阅读材料:https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en帮助我。 –

回答

2

代码中存在逻辑缺陷。这就是你的代码运行方式:

  1. 检查我们是否有权限。
  2. 如果我们没有权限:
    • 我们应该问一下权限吗?
      • 如果是的话,请登录 “权限授予”
      • 如果没有,那么请允许

所以基本上,你是当你不应该申请许可。在你应该请求许可的情况下,不要询问许可,而只需登录“授予许可”。 你只需要稍微改变你的代码:

private void permissionForMarshmallow() { 

     int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS); 

     if (ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.READ_SMS}, REQUEST_CODE_ASK_SINGLE_PERMISSION); 

     } 
     else { 
      // user probably checked "never ask again" - we should not ask for permission. 
     } 
    } 
} 
+0

Thanx!有用 ! – aarav

0

看起来像在第一次启动shouldShowRequestPermissionRationale是真实的,你只是创建一个日志条目。你把它写在你的日志中,但在这种情况下,授权还没有被授予。

相关问题