Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
545 views
in Technique[技术] by (71.8m points)

broadcastreceiver - Getting the caller ID in Android 9

I have been using the following code in a BroadcastReceiver to get the caller ID of incoming calls:

@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;
}

Unfortunately this has stopped working in Android 9.0 (API 28). More specifically, aIntent.getStringExtra(EXTRA_INCOMING_NUMBER) always returns null. In android versions<=API 27 everything works correctly

I have also added the READ_PHONE_STATE and READ_CALL_LOG permissions in the manifest file.

Any ideas? Anybody else experiencing the same problem?

Thanks in advance for your help.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I found the answer to my question:

First, in Android 9, you have to explicitly ask for both the READ_PHONE_STATE and the READ_CALL_LOG permissions at run time. In previous Android versions you only had to ask for the READ_PHONE_STATE permission. Both of them have to be asked at run time.

Second, if both of the above permissions have been given, the onReceive method is called twice (!!). The first time the intent is "empty" (EXTRA_INCOMING_NUMBER is null). The second time the intent is normally populated as it should. This is documented in the TelephonyManager Documentation.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...