2017-02-08 2 views
1

Я пытаюсь выполнить блокировку вызовов и добавлен под разрешением в манифесте.Null входящий номер в Marshmallow с помощью PhoneStateListener

<uses-permission-sdk-23 android:name="android.permission.MODIFY_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

Мой код для приемника:

public class PhoneCallStateListener extends PhoneStateListener { 
    public class PhoneCallReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      SharedPreferences sharedPreferences = context.getSharedPreferences("CallBlockingPreference", Context.MODE_PRIVATE); 
      boolean blockCalls=sharedPreferences.getBoolean("blockCall", false); 
      Toast.makeText(context, "Call block enabled", Toast.LENGTH_SHORT).show(); 
      TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
      PhoneCallStateListener customPhoneListener = new PhoneCallStateListener(context); 
      telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 


     } 
    } 

Код для сравнения номер:

public PhoneCallStateListener(Context context) { 
     this.context = context; 
    } 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     preferences = context.getSharedPreferences(MYPREFS, Context.MODE_PRIVATE); 
     setdefault.add(""); 
     editor = preferences.edit(); 
     switch (state) { 

      case TelephonyManager.CALL_STATE_RINGING: 
       ArrayList<String> allBlockedNuber = new ArrayList<>(); 
       reterievePref = preferences.getStringSet("listOfBlockedNumbers", setdefault); 
       allBlockedNuber.addAll(reterievePref); 
       System.out.println(allBlockedNuber.size()); 
       System.out.println(incomingNumber); 
     } 
} 

Я получаю нулевой входящий номер и сообщение об ошибке, как:

java.lang.SecurityException: Neither user 10561 nor current process has android.permission.CALL_PHONE. 

Mobile показывает только одно разрешение как Pho ne и что я дал вручную. Тогда почему ошибка и не получение входящего номера? PLS руководство.

+0

взять разрешение запуска время, если вы ориентируетесь Android SDK> = 23 – Aryan

+0

Спасибо, это сработало. – Panache

ответ

0

Запрос разрешения на Run Time

Если устройство работает под управлением Android 6.0 или выше, и целевой SDK вашего приложения является 23 или выше: приложение должно перечислить разрешения в манифесте, и он должен просить каждый опасный которое вам нужно во время работы приложения. Пользователь может предоставлять или отклонять каждое разрешение, и приложение может продолжать работать с ограниченными возможностями, даже если пользователь отклоняет запрос на разрешение.

https://developer.android.com/training/permissions/requesting.html

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