如何在Android 9中接听来电时获取电话号码?

时间:2019-11-21 21:59:16

标签: android android-studio kotlin phone-call android-9.0-pie

如何在android 9中获取来电号码。

我在https://developer.android.com/reference/android/telephony/TelephonyManager#ACTION_PHONE_STATE_CHANGED

中阅读了此内容

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的内容?

0 个答案:

没有答案