Cilenco
Cilenco

Reputation: 7179

Create Notification with BroadcastReceiver

I tried to create a Notification with this Code:

private void setNotificationAlarm(Context context) 
{
    Intent intent = new Intent(getApplicationContext() , MyNotification.class);
    PendingIntent pendingIntent  = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);  

    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 , pendingIntent);
    Log.d("ME", "Alarm started");
}

public class MyNotification extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Log.d("ME", "Notification started");

        NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("My notification")
            .setContentText("Hello World!");

        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, mBuilder.build());
    }
}

And here my Mainfest declaration:

<receiver
    android:name=".MyNotification"
    android:enabled="true"
    android:exported="false" >
</receiver>

My problem now is, that the alarm is generated but the Notification isn't displayed. The BroadcastReceiver is declared in the mainfest file and there are no compiler or runtime errors.

My second problem is that setLatestEventInfo and new Notification Contructor are deprecated. What can I use instead of it?

Upvotes: 17

Views: 42571

Answers (3)

Kaushali de Silva
Kaushali de Silva

Reputation: 241

you can use

Intent switchIntent = new Intent(BROADCAST_ACTION);

instead of using

Intent intent = new Intent(getApplicationContext() , MyNotification.class);

in here BROADCAST_ACTION is action that you are defining in manifest

<receiver android:name=".MyNotification " android:enabled="true" >
    <intent-filter>
        <action android:name="your package.ANY_NAME" />
    </intent-filter>
</receiver>

you can catch it by using that action name

public class MyNotification extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    String act = "your package.ANY_NAME";
        if(intent.getAction().equals(act)){

            //your code here
        }
}}

Upvotes: 8

Ashwini Bhangi
Ashwini Bhangi

Reputation: 291

I think you need to use

PendingIntent.getBroadcast (Context context, int requestCode, Intent intent, int flags)

instead of getService

Upvotes: 9

tyczj
tyczj

Reputation: 74006

You use Notification.Builder to build the notification now and the pending intent needs to be PendingIntent.getBroadcast()

Upvotes: 3

Related Questions