6

here is my manifest

<receiver android:name=".MyCallReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
</receiver>

and

public class MyCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
            if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {

              some code

            }

        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE) || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){

              some code
            }         
        }   
}

it is works but after sometime that press back button and phone be idle it doesn't work any more

(i added "android.os.Process.killProcess(android.os.Process.myPid());" at the end of my code and now it is better and work for maybe 2 3 hour after last execute)

  • Check this link http://stackoverflow.com/questions/30365955/broadcast-receiver-does-not-deduct-calls-android/30368041#30368041 – DJphy Jun 01 '15 at 04:50
  • I think, BroadcastReceiver is getting sleep as the same as your phone state. I got this problem too. – Anggrayudi H Jun 02 '15 at 14:37

1 Answers1

0

You can use alarm manger to broadcast receiver after certain interval of time like this.

public static void scheduleTestAlarmReceiver(Context context) {

   Intent receiverIntent = new Intent(context, TestAlarmReceiver.class);
   PendingIntent sender = PendingIntent.getBroadcast(context, 123456789, receiverIntent, 0);

   AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
   alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+startDelay, someDelay, sender);

}
Srishti Roy
  • 576
  • 5
  • 17