Получение идентификатора звонящего в Android 9 - PullRequest
0 голосов
/ 24 августа 2018

Я использовал следующий код в BroadcastReceiver, чтобы получить идентификатор звонящего на входящие звонки:

@Override
public void onReceive(Context aContext, Intent aIntent) {
   String action = aIntent.getAction();

   if (action==null) return;
   if (!action.equals("android.intent.action.PHONE_STATE")) return;

   String curState = aIntent.getStringExtra(TelephonyManager.EXTRA_STATE);

   if ((TelephonyManager.EXTRA_STATE_RINGING.equals(curState))
      &&(TelephonyManager.EXTRA_STATE_IDLE.equals(oldState)))){
      String incNumber = aIntent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

      // do something here
   }
   oldState=curState;
}

К сожалению, это перестало работать в Android 9.0 (API 28). Более конкретно, aIntent.getStringExtra(EXTRA_INCOMING_NUMBER) всегда возвращает ноль. В андроиде versions<=API 27 все работает правильно

Я также добавил разрешения READ_PHONE_STATE и READ_CALL_LOG в файл манифеста.

Есть идеи? Кто-нибудь еще испытывает ту же проблему?

Заранее спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Добавить READ_CALL_LOG разрешение в манифесте, как показано ниже:

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

Затем

Приложения -> Ваше приложение -> Разрешения -> Предоставить разрешение для ведения журнала вызовов

Вашдолжен получить номер телефона сейчас, после второго раза ваш receiver называется

0 голосов
/ 26 августа 2018

Я нашел ответ на свой вопрос:

Во-первых, в Android 9 вы должны явно запросить разрешения READ_PHONE_STATE и READ_CALL_LOG во время выполнения.В предыдущих версиях Android вам нужно было только получить разрешение READ_PHONE_STATE.Оба они должны быть заданы во время выполнения.

Во-вторых, если были предоставлены оба вышеуказанных разрешения, метод onReceive вызывается дважды (!!).Первый раз, когда намерение «пусто» (EXTRA_INCOMING_NUMBER равно нулю).Во второй раз намерение обычно заполняется как следует.Это задокументировано в Документация TelephonyManager .

...