Search code examples
androidbroadcastreceiveruser-permissions

How to get incoming call number? [Android]


I'm trying to get incoming call number with Android but it return null.

I add user permission inside manifest:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<receiver android:name=".ServiceReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>

and using this class:

public class ServiceReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(){
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);
        System.out.println("incomingNumber : "+incomingNumber);
    }
 },PhoneStateListener.LISTEN_CALL_STATE);
}

but doesn't work, any idea?


Solution

  • Please note you need permission READ_CALL_LOG if you want to get incomingNumber, you can check documents here

    String: call phone number. If application does not have READ_CALL_LOG permission or carrier privileges (see TelephonyManager#hasCarrierPrivileges), an empty string will be passed as an argument.