2016-02-02 4 views
0

Я следую инструкциям разработчика и видео разработчика, но после того, как я проверил по телефону, он не спрашивает разрешения, какую-либо идею?Android 6.0 Не спрашивайте разрешения

Я разместил код внутри ONCREATE и добавил необходимые функции. Android Studio выполнена без проблем.

int REQUEST_READ_PHONE; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ... 

    //PERMISSION CHECK 
    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { 
     //CHECK IF SERVICE IS RUNNING 
     executeService(); 

     if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_PHONE_STATE)) { 
      Toast.makeText(MainActivity.this, "Permission REQUIRED to work properly", Toast.LENGTH_LONG).show(); 
     } 

     //REQUEST PERMISSION 
     ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE); 
    } 

} 

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

    if (requestCode == REQUEST_READ_PHONE){ 

      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //PERMISSION GRANTED 
       executeService(); 
      } else { 
       //PERMISSION DENIED permission denied 
       Toast.makeText(MainActivity.this, "Application will not work properly", Toast.LENGTH_LONG).show(); 
      } 
    } else { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

private void executeService() { 
    //DO STUFF HERE 
} 
+0

Вы запрашиваете разрешение только в том случае, если разрешение уже предоставлено ... Если этот первый оператор if должен быть вызван, если разрешение не предоставлено, просто измените его на «! = PackageManager.PERMISSION_GRANTED» – aProperFox

ответ

2

Есть две вещи

1) Проверьте Target Sdk Version установлен на 23.

2) Изменить этот кусок кода

ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED 

в

ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED 
+0

EPIC , Я объединил 2 учебника, и я забыл изменить! = .... СПАСИБО :) – FilipeOS

1

Ваша логика неверна:

Попробуйте это:

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { 
    executeService(); 
} else { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_PHONE_STATE)) { 
    Toast.makeText(MainActivity.this, "Permission REQUIRED to work properly", Toast.LENGTH_LONG).show(); 
    } 

    //REQUEST PERMISSION 
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE); 

} 

Кроме того, вы будете видеть только разрешения Dialog на устройствах, работающих под управлением Android 6.0.

+0

Да, это то, что я собирался сказать. Молодцы @DeanWild – YoungCoconutCode

Смежные вопросы