Reputation: 7179
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
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
Reputation: 291
I think you need to use
PendingIntent.getBroadcast (Context context, int requestCode, Intent intent, int flags)
instead of getService
Upvotes: 9
Reputation: 74006
You use Notification.Builder
to build the notification now and the pending intent needs to be PendingIntent.getBroadcast()
Upvotes: 3