2016-09-23 78 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是真實的,你只是創建一個日誌條目。你把它寫在你的日誌中,但在這種情況下,授權還沒有被授予。

相關問題