2011-10-13 57 views
0

我正在创建一个应用程序,可以将约会添加到列表中。 如果预约在附近,我希望我的应用程序在某个小时的预约当天在状态栏中显示通知。Android - 规划用户栏通知

我使用http://developer.android.com/guide/topics/ui/notifiers/notifications.html 的代码来创建我的通知。

但是,脚本中的“when”参数有点令人困惑,因为状态栏通知总是在被调用时触发。 通知通知=新通知(图标,tickerText,何时);

安排此类通知的最佳方式是什么? 似乎有没有简单的方法,我必须创建一个服务,启动一个监听器活动与一个线程来循环我的约会日期,并显示一个通知时,日期适合当前日期?

回答

0

但是,脚本中的“when”参数有点混淆 ,因为状态栏通知在调用时总是被触发。 通知通知=新通知(图标,tickerText,何时);

正确 - 通知被调用时触发。如果您将变量设置为System.currentTimeMilis()(如示例中所示),则表示 - 现在显示通知。 作为触发您的通知的内容,由您来处理。一个活动看起来不是一个好的选择,但是一个服务可以。在应用程序启动时初始化您的服务(并且不要忘记在应用程序退出时停止它),并让它执行“侦听”和触发通知。那还不如看:

public class NotifyService extends Service { 

    private NotificationManager mNM; 


    @Override 
    public void onCreate() { 
    mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    //do some work, listen for change 
    if (triggerSatisfied) showNotification(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     // Cancel the persistent notification. 
     mNM.cancelAll(); 
    } 


    @Override 
    public IBinder onBind(Intent arg0) { 
     return mBinder; 
    } 

    private final IBinder mBinder = new LocalBinder(); 


    private void showNotification() { 
     //code for notification goes here 
    } 


    public class LocalBinder extends Binder { 
      NotifyService getService() { 
       return NotifyService.this; 
      } 
     } 
+0

好,谢谢,服务是这样,我想也许有是accomplisch这更简单的方法,但显然,如果你想显示在固定的计时时间通知有未:) –

+0

,你必须在你的活动中添加一些Timer。 – Maggie

+0

我现在创建了一个服务,每秒运行一个计时器并查询SQLiteDatabase中的notificationdates,并检查它们中的一个是否与当前时间戳匹配以触发通知。 但我想知道,是不是这种资源和电池消耗? 没有更好的方法来完成这个吗? 有点像加入约会时,重新加载服务并填写onCreate中的ArrayList以循环定时器? –