Search code examples
androidbroadcastreceiver

Broadcast Receiver


I’m new to android, I’m trying to do an application using Broadcast Receiver which send the message to notification bar when wallpaper is changed on device. It’s successfully installed on device but not working as expected. Here is the code

WallPagerNotificationReceiver.java

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;

import android.util.Log;
import android.widget.Toast;

public class WallPaperNotificationReceiver extends BroadcastReceiver {

                @Override
                public void onReceive(Context context, Intent intent) {
                                this.sendNotification(context, "You have changed Wallpaper");
    }
    private void sendNotification(Context ctx, String message)
    {
                //Get the notification manager
                String ns = Context.NOTIFICATION_SERVICE;
                NotificationManager nm =
                                (NotificationManager)ctx.getSystemService(ns);

                //Create Notification Object
                                int icon = R.drawable.ic_launcher;
                                CharSequence tickerText = "Hello";
                                long when = System.currentTimeMillis();

                                Notification notification =
                                                new Notification(icon, tickerText, when);

                                //Set ContentView using setLatestEvenInfo
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("http://www.google.com"));
                    PendingIntent pi = PendingIntent.getActivity(ctx, 0, intent, 0);
                    notification.setLatestEventInfo(ctx, "Intimation", message, pi);

                    //Send notification
                                nm.notify(1, notification);
                                Toast.makeText(ctx,"Hello Nawin",Toast.LENGTH_LONG).show();
    }

}

Manifest.xlm

<xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.ac.srmuniv"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

    <receiver android:name=".WallPaperNotificationReceiver">
           <intent-filter>
            <action android:name="android.intent.action.WALLPAPER_CHANGED" />
            </intent-filter>
    </receiver>
 </application>
</manifest>

Is this right way to use Broadcast receiver? if so Help me where I did a mistake?

Thanks in Advance.

P.S: I’m not using either Activity or Service. According to the process life cycle we can have a foreground process by hosting a broadcast receiver http://developer.android.com/guide/components/processes-and-threads.html#Threads


Solution

  • Since Android version 3.1 BroadcastReceivers that are registered only in the manifest and in an app which has no Activity, will not work. Each app must have an activity which must be run at least once to enable the receiver to work. This is to prevent malware. You just need a dummy activity which does nothing then quits to run once and make your receiver work.