如何在android 9中获取来电号码。
中阅读了此内容Manifest.permission.READ_CALL_LOG权限,第二个额外的EXTRA_INCOMING_NUMBER以String的形式提供用于拨入和拨出电话的电话号码。
如果接收应用具有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上的代码,传入号码为null:
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的内容?