Search code examples
androidandroid-studioservicebroadcastreceiver

Using Broadcast Reciever inside Service


I am trying to use Broadcast Receiver inside Service class. But onReceive method in Broadcast Receiver is not called. I doesn't where is the problem occurs.Below is my code,


public class CallService extends Service {
    CallReceiver callReceiver=null;
    String TAG=CallService.class.getSimpleName();

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        CallReceiver callReceiver=new CallReceiver();
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        intentFilter.addAction("a");
        this.registerReceiver(callReceiver,intentFilter);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate: started in call service");
        CallReceiver callReceiver=new CallReceiver();
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        intentFilter.addAction("a");
        this.registerReceiver(callReceiver,intentFilter);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        this.unregisterReceiver(callReceiver);
    }





    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    public class CallReceiver extends BroadcastReceiver{


        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equalsIgnoreCase("a"))
                Log.d("CallService", "onReceive: aa");
        }
    }
}

I have added Action to Intent Filter in onCreate and onStart. After registering it will go to onReceive method and need to check the Action. Am I Right? But in my case onReceive method is not called.Anybody help me to find a better solution.


Solution

  • I things you must not use receiver on service because it uselles normally you must create receiver to call service if you want stable service for update you can use intent service. But if you use receiver for system updates like wifi off/on or etc you can create receiver and register from manifest so it always works and you can call service from it or do your code inside on receive method