java - Activity shown immediatly instead of showing a notification -
i'm trying use alarmmanager send notification user later in day, whether using application or not. pasted saw here : http://developer.android.com/guide/topics/ui/notifiers/notifications.html, went wrong because instead of showing notification, androidlauncher activity shown.
here code :
public void plannotification() { alarmmanager = (alarmmanager)this.getsystemservice(context.alarm_service); notificationcompat.builder mbuilder = new notificationcompat.builder(this) .setsmallicon(r.drawable.icon) .setcontenttitle("my notification") .setcontenttext("hello world!"); intent resultintent = new intent(this, androidlauncher.class); taskstackbuilder stackbuilder = taskstackbuilder.create(this); stackbuilder.addparentstack(androidlauncher.class); stackbuilder.addnextintent(resultintent); pendingintent resultpendingintent = stackbuilder.getpendingintent( 0, pendingintent.flag_update_current ); mbuilder.setcontentintent(resultpendingintent); int currentapiversion = android.os.build.version.sdk_int; if (currentapiversion >= 19) am.setwindow(alarmmanager.rtc_wakeup, system.currenttimemillis() + 5000, 5000, resultpendingintent); else am.set(alarmmanager.rtc_wakeup, system.currenttimemillis() + 86400000, resultpendingintent); }
i'm still new intents , pendingintents, may dumb mistake.
~~~ ~~~ edit : thank ! understood need broadcastreceiver, can't work. looks onreceive()
never called.
here main activity :
@override public void plannotification() { alarmmanager = (alarmmanager)this.getsystemservice(context.alarm_service); intent intent = new intent(this, alarmreceiver.class); pendingintent alarmintent = pendingintent.getbroadcast(this, 0, intent, pendingintent.flag_update_current); int currentapiversion = android.os.build.version.sdk_int; if (currentapiversion >= 19) am.setwindow(alarmmanager.rtc_wakeup, system.currenttimemillis() + 5000, 5000, alarmintent); else am.set(alarmmanager.rtc_wakeup, system.currenttimemillis() + 5000, alarmintent); }
and broadcastreceiver :
public class alarmreceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { system.out.println("on receive"); notificationcompat.builder mbuilder = new notificationcompat.builder(context) .setsmallicon(r.drawable.icon) .setcontenttitle("my notification") .setcontenttext("hello world!"); intent resultintent = new intent(context, androidlauncher.class); taskstackbuilder stackbuilder = taskstackbuilder.create(context); stackbuilder.addparentstack(androidlauncher.class); stackbuilder.addnextintent(resultintent); pendingintent resultpendingintent = stackbuilder.getpendingintent( 0, pendingintent.flag_update_current ); mbuilder.setcontentintent(resultpendingintent); notificationmanager mnotificationmanager = (notificationmanager) context.getsystemservice(context.notification_service); mnotificationmanager.notify(androidlauncher.notifid, mbuilder.build()); } }
the way have it, alarm manager directly using resultintent
.
you should move notification creation code broadcastreceiver
:
public class alarmreceiver extends broadcastreceiver{ @override public void onreceive(context context, intent intent) { notificationcompat.builder mbuilder = new notificationcompat.builder(this) .setsmallicon(r.drawable.icon) .setcontenttitle("my notification") .setcontenttext("hello world!"); intent resultintent = new intent(this, androidlauncher.class); taskstackbuilder stackbuilder = taskstackbuilder.create(this); stackbuilder.addparentstack(androidlauncher.class); stackbuilder.addnextintent(resultintent); pendingintent resultpendingintent = stackbuilder.getpendingintent( 0, pendingintent.flag_update_current ); mbuilder.setcontentintent(resultpendingintent); notificationmanager mnotificationmanager = (notificationmanager) getsystemservice(context.notification_service); mnotificationmanager.notify(mid, mbuilder.build()); } }
and use alarmmanager
call broadcastreceiver
:
intent intent = new intent(this, alarmreceiver.class); pendingintent alarmintent = pendingintent.getbroadcast(this, 0, intent, 0); if (currentapiversion >= 19) am.setwindow(alarmmanager.rtc_wakeup, system.currenttimemillis() + 5000, 5000, alarmintent); else am.set(alarmmanager.rtc_wakeup, system.currenttimemillis() + 86400000, alarmintent);
Comments
Post a Comment