Как узнать номер телефона при входящем звонке на андроид 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 дважды?