Search code examples
androidservicebroadcastreceiverbroadcast

android - unable to receive broadcast from a background service


I was working with broadcast receiver and background services. So, When one my activity goes onPause(), I start my service and service sends a broadcast. Now, my broadcast receiver is in the same class as my service. I am receiving my service call, but I am unable to receive the broadcast info. Here is the code I have been working on.. [EDITED]

private String notifier = "ninja.ibtehaz.thenewproject.Activities.activityNew"; 

@Override
protected void onHandleIntent(Intent intent) {

    boolean flag = ProjectApp.getInstance().isActivityVisible();
    Log.e("rainbow", "onHandleIntent");
    if (!flag) {
        //start emergency activity
        Log.e("rainbow", "starting activity");
        Intent broadcastIntent = new Intent(notifier);
        sendBroadcast(broadcastIntent);
    }
}

[EDITED] on activityNew class >

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.e("rainbow", "In Method: Service started");
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    registerReceiver(receiver, filter);
}

private BroadcastReceiver receiver = new BroadcastReceiver() {

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

        Log.e("rainbow", "In Method: onReceive");

        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            Log.e("rainbow","Screen went OFF");
        }

        if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.e("rainbow","Screen went ON");
        }


    }
};

and the manifest file : [EDITED]

<service android:name=".Activities.ServiceBackground">
</service> 
<receiver
    android:name=".Activities.ActivityEmergency"
    android:theme="@android:style/Theme.NoDisplay">
</receiver>

here is my logcat info :

E/rainbow: onHandleIntent
E/rainbow: starting activity

I am not getting anything after that..

I know this might not be the best practice, I just started working with these things. Thank you for your help. Cheers!


Solution

  • You are registering a BroadcastReceiver with an IntentFilter which only contains Intent.ACTION_SCREEN_OFF and Intent.ACTION_SCREEN_ON, but no ninja.ibtehaz.thenewproject.Activities.activityNew. It means this BroadcastReceiver can only be invoked when Intent.ACTION_SCREEN_OFF or Intent.ACTION_SCREEN_OFF is broadcast.

    Now pay attention to your sendBroadcast code:

    Intent broadcastIntent = new Intent(notifier);
    sendBroadcast(broadcastIntent);
    

    You are broadcasting an action "ninja.ibtehaz.thenewproject.Activities.activityNew", which can't match the IntentFilter bound with the BroadcastReceiver you have registered.

    Try to use these codes:

    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(notifier);
    registerReceiver(receiver, filter);