Search code examples
androidbroadcastreceiverphone-state-listener

Listen to phone state even after boot


In my app I listen to the phone state events(i.e call received, idle etc) using a Broadcast Receiver. Code as below:

public class PhoneCallreceiver extends BroadcastReceiver {
    private boolean ringing;
    private boolean received;

    public PhoneCallreceiver() {
    }

@Override
public void onReceive(Context context, Intent intent) {
    Log.v("ranjith", "enterted receiver");
    Bundle bundle = intent.getExtras();
    String incomingnumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
    String state = bundle.getString(TelephonyManager.EXTRA_STATE);
    Log.v("ranjapp", state);

    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
        ringing = true;
        received = false;
    } 
}

Manifest.xml

    <receiver
        android:name=".PhoneCallreceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE"/>
        </intent-filter>
    </receiver>

My problem is I want to start the BroadCast Receiverautomatically after the device is re-booted. I have a BroadCast Receiver to listen to boot but I am not sure how to start the PhoneCallreceiver BroadCast receiver.

Manifest.xml

   <receiver
        android:name=".backend.BootStarter"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

Code:

public class BootStarter extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) { 
        PhoneCallreceiver callreceiver = new PhoneCallreceiver();
        context.registerReceiver(callreceiver,new IntentFilter(**what to put here**));
            }
        }

Solution

  • Found the answer to my question, intentfilter action to receive phonestate is android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED

    My updated code below:

    public class BootStarter extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) { 
        PhoneCallreceiver callreceiver = new PhoneCallreceiver();
                context.registerReceiver(new PhoneCallreceiver(), new IntentFilter(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED));
            }
        }