Wrong when register two receiver in an activity Android

342 Views Asked by At

I have an activity. It will be receive two variable from an service. In the service, I will send two variable to the activity by

 // Send first variable 
 sendBroadcast(new Intent("first_one"));
 // Send second variable 
 sendBroadcast(new Intent("second_one"));

Now, In the activity, I used bellow code to receive the data. There are

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        registerReceiver(firstRec, new IntentFilter("first_one"));
        registerReceiver(secondRec, new IntentFilter("second_one"));
    }   
    @Override
    protected void onPause() {
        super.onPause();
        if (firstRec != null) {
            unregisterReceiver(firstRec);
            firstRec = null;
        }
        if (secondRec != null) {
            unregisterReceiver(secondRec);
            secondRec = null;
        }
    }
    private BroadcastReceiver firstRec = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("TAG","OK first");
        }
    };

    private BroadcastReceiver secondRec = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("TAG","OK second");
        }
    };

However, I cannot print the log "OK second" when I called sendBroadcast(new Intent("second_one")); in the service. What is happen? How can I fix it? Thank you

UPDATE: my activity is an accept calling activity get from @notz How can incoming calls be answered programmatically in Android 5.0 (Lollipop)?. Then I create an service as following

public class myService extends Service{
@Override
    public void onCreate() {
        super.onCreate();
 }
@Override
public IBinder onBind(Intent intent) {
   return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
   Intent answerCalintent = new Intent(getApplicationContext(), AcceptCallActivity.class);
   answerCalintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
   answerCalintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(answerCalintent);
   //Send the second command after 10 second and make the calling in background
   new CountDownTimer(10000, 100) {
        public void onTick(long millisUntilFinished) {
        }
        public void onFinish() {
           sendBroadcast(new Intent("second_one"));
        }
   }.start();

   return START_STICKY;
}
}
1

There are 1 best solutions below

0
On

You should unregister your reсeiver in a method opposite to that in which you register it: If you registered receiver in onCreate() - then you should unregister it in onDestroy(). But as i know, for most cases, the best practice is to register receiver in onResume() and unregister it in onPause().