Как узнать номер телефона при входящем звонке в android 9?

Как узнать номер телефона при входящем звонке на андроид 9.

Я прочитал это в https://developer.android.com/reference/android/telephony/TelephonyManager#ACTION_PHONE_STATE_CHANGED

Разрешение Manifest.permission.READ_CALL_LOG, второй дополнительный EXTRA_INCOMING_NUMBER предоставляет номер телефона для входящих и исходящих вызовов в виде строки.

Если принимающее приложение имеет разрешения Manifest.permission.READ_CALL_LOG и Manifest.permission.READ_PHONE_STATE, оно получит широковещательную рассылку дважды; один с EXTRA_INCOMING_NUMBER заполнен номером телефона, а другой с пустым. Из-за характера трансляций вы не можете предположить порядок, в котором эти трансляции будут поступать, однако в этом случае вы гарантированно получите две. Приложения, которые заинтересованы в EXTRA_INCOMING_NUMBER, могут игнорировать широковещательные рассылки, в которых EXTRA_INCOMING_NUMBER отсутствует в дополнении (например, когда Intent#hasExtra(String) возвращает false).

Разрешение:

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

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

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

Это мой код на BroadcastReceiver, и входящий номер равен нулю:

override fun onReceive(context: Context, intent: Intent) {   


            when (intent.getStringExtra(TelephonyManager.EXTRA_STATE)) {

                //cuando entra la llamada
                TelephonyManager.EXTRA_STATE_RINGING -> {

                    val incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)

                    Log.e("INFO", "Incoming Number : $incomingNumber") //is always null in android 9

                }

                //cuando cuelgas
                TelephonyManager.EXTRA_STATE_IDLE -> {
                    val incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)

                }

                //cuando respondes
                TelephonyManager.EXTRA_STATE_OFFHOOK -> {
                    val incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)

                }
            }

    }

Как я могу применить то, что сказано выше о получении BroadcastReceiver дважды?


person Felix A Marrero Pentón    schedule 21.11.2019    source источник
comment
Возможный дубликат TelephonyManager.EXTRA_INCOMING_NUMBER имеет значение null в Android 9   -  person Jacks    schedule 22.11.2019
comment
обрабатывать разрешение во время выполнения   -  person sasikumar    schedule 22.11.2019
comment
Как обрабатывать разрешения во время выполнения для этого случая, когда это не действие, а класс, расширяющий BroadcastReceive?   -  person Felix A Marrero Pentón    schedule 22.11.2019
comment
Если я использую разрешения во время выполнения, означает ли это, что каждый раз, когда я ввожу вызов, мне нужно будет принимать разрешение на получение входящего номера? Потому что это было бы не очень практично   -  person Felix A Marrero Pentón    schedule 22.11.2019