2017-09-04 64 views
0

這是我的OnCreate代碼()方法:運行權限不工作

if (ContextCompat.checkSelfPermission(thisActivity, 
      Manifest.permission.READ_CONTACTS) 
    != PackageManager.PERMISSION_GRANTED) { 

if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
     Manifest.permission.RECIEVE_SMS)) { 

} else { 

    ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.READ_CONTACTS},1); 
} 

在我onRequestPermissionsResult()方法:

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

       init(); 
}else{ 
     finish(); 
} 

我的清單文件具有以下權限

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.SEND_SMS"/> 
<uses-permission android:name="android.permission.READ_SMS"/> 

但我沒有得到對話框要求的權限,我不知道這個問題?

+0

下設置 - >應用程序檢查 - >(您的應用程序名稱) - >權限,看看是否應用已獲得授予的權限。 – Haem

回答

1

如果您的應用定位的Android 6.0及以上的增加運行許可

在在Android 6.0(API級別23開始),用戶在應用運行時爲應用授予權限,而不是在他們安裝應用時授予應用

用下面的代碼READ_SMS

String permission = Manifest.permission.READ_SMS; 
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); 
} 

,比10

附加運行時允許把手導致這樣

@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(); 
      // perform your action here 

     } else { 
      Toast.makeText(AccountClass.this,"permission not granted", Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 
+0

謝謝!它的工作原理..你能告訴我在我的代碼中出了什麼問題嗎? –

+0

您要求提供** READ_CONTACTS **權限並且未在清單文件中添加此權限 –

0

嘗試這種情況:

if (ActivityCompat.checkSelfPermission(AddnewPhotoActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) { 

       ActivityCompat.requestPermissions(AddnewPhotoActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_EXTERNAL_STORAGE); 

      } else { 

       isPermissionGranted(true); 
      } 

isPermissionGranted(布爾值); ====>方法調用

public void isPermissionGranted(boolean permission) { 
     if (permission) { 


      //Your Operation 


     } else { 

      Toast.makeText(this, "Permission not granted", Toast.LENGTH_SHORT).show(); 
     } 
    } 

onRequestPermissionsResult

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

     if (requestCode == REQUEST_READ_EXTERNAL_STORAGE) { 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       isPermissionGranted(true); 

      } else 

      { 
       isPermissionGranted(false); 
      } 
     } 

    } 
+0

它仍然不顯示要求許可的對話框?並且grantResults正在傳遞PERMISSION_DENIED –