2017-02-05 9 views
0

я получил ошибку нижекак принять READ_PHONE_STATE разрешения на андроид 6.0

java.lang.SecurityException: getDeviceId: Ни пользователь, ни 10250 текущего процесса имеет android.permission.READ_PHONE_STATE.

AndroidRuntime: неустранимый: Основной процесс: com.infyco.kp.new_tab, ПИД: 23149 java.lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.infyco.kp.new_tab/com.infyco. kp.new_tab.Splashscreen}: java.lang.SecurityException: getDeviceId: ни у пользователя 10257, ни у текущий процесс имеет android.permission.READ_PHONE_STATE.

ниже мой код я не знаю, что это неправильно

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

это работает для разрешения SEND_SMS, как показано ниже, но не работает над

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, 1); 
+0

У вас есть '<использует-разрешение>' элемент для 'READ_PHONE_STORAGE 'в вашем манифесте? – CommonsWare

+0

проверить его https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous – Ajay

+0

@Commons ware ... да есть ли это в манифесте :) Я хочу, чтобы код получил время выполнения разрешения даже я пробовал с ниже isPermissionGranted(), но не работает ... :( –

ответ

0

вы запрашиваете permission с таким же Запрос кода 1

попробуйте этот способ, чтобы запросить Runtime permission

public boolean isPermissionGranted() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     if (checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE) 
       == PackageManager.PERMISSION_GRANTED) { 
      Log.v("TAG","Permission is granted"); 
      return true; 
     } else { 

      Log.v("TAG","Permission is revoked"); 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 2); 
      return false; 
     } 
    } 
    else { //permission is automatically granted on sdk<23 upon installation 
     Log.v("TAG","Permission is granted"); 
     return true; 
    } 
} 


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

     case 2: { 

      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 
       //do ur specific task after read phone state granted 
      } else { 
       Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

использовать это как:

if(isPermissionGranted()){ 
//do ur specific task after read phone state 
} 

Также в вашем манифеста добавить:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
    { 
     if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) 
       != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 
        PERMISSIONS_REQUEST_READ_PHONE_STATE); 
     } 
     else 
      { 
      mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { 
       return; 
      } 
      IMEI_Number_Holder= mTelephonyManager.getDeviceId(); 
      } 
    } 
    else 
    { 
     mTelephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { 
      return; 
     } 
     IMEI_Number_Holder = mTelephonyManager.getDeviceId(); 
    } 
+1

Подумайте, чтобы добавить какое-то объяснение к вашему ответу. – Sam