Intercept calls Android (BroadcastReceiver)

Viewed 84

I need to intercept outgoing and incoming calls in my android application, but I can't get it to enter the onReceive method, I'm using API 30 (Android 10).

This is my BroadcastReceiver class:

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    call(context);
}

private void call(Context context) {
    PhoneCallListener phoneListener = new PhoneCallListener();
    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}

private class PhoneCallListener extends PhoneStateListener {
    public boolean isPhoneCalling = false;
    Boolean wasRinging = false;

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {

        if (TelephonyManager.CALL_STATE_RINGING == state) {
            // phone ringing
            //Aquí ya detectas que el teléfono esta recibiendo una llamada entrante

        }
        if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            // active
            isPhoneCalling = true;

        }

        if (TelephonyManager.CALL_STATE_IDLE == state) {

            isPhoneCalling = false;
        }
    }
}    

This the Manifest permissons:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.CALL_PHONE" />

  <receiver
        android:name="etapa.webServices.inec.go.cr.MyReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>

    </receiver>
0 Answers
Related