如何设置应用程序以在特定时间每天触发服务/闹钟?

问题描述:

所以我希望我的应用程序在每天早上8:00发送通知受到当天是否有事件的影响。如何设置应用程序以在特定时间每天触发服务/闹钟?

我有一个SQLlite数据库,它存储了发送通知的日期。我的应用需要的是这样的 - 每天早晨8点,它应该检查是否有今天的事件。如果当天有活动,则发送通知。

我已经用DB和通知实现了部件。我只需要在每天早上8点实施应用程序检查数据库的部分。

**更新:**我做了一个服务,检查当前时间是否是8:00。以下是该服务的代码。

public int onStartCommand(Intent intent, int flags, int startId) { 
    // TODO Auto-generated method stub 

    System.out.println("inside on start command for service"); 

    myPrefs = this.getSharedPreferences("settings", this.MODE_PRIVATE); 

    checkTime(); 

    return START_STICKY; 
} 

// to check if the time for alarm is here 
private void checkTime() { 
    // TODO Auto-generated method stub 
    try{ 
    System.out.println("inside check time"); 

    Calendar cal; 
    cal = Calendar.getInstance(); 

    if (08 == cal.get(cal.HOUR_OF_DAY) && 00 == cal.get(cal.MINUTE)) { 
     // to call db and check for events 
     nm = new MyNotificationManager(this); 
     if (nm.checkEvent()) { 
      nm.setNotifications(); 
     } 
    } 
    }catch(Exception e){ 
     System.out.println("inside exception for check time "+e.toString()); 
    } 
} 

问题是服务只检查一次。如何让它每分钟检查一次? 任何人都可以帮我吗?

+0

我也面临同样的问题。 https://*.com/questions/47324975/alarm-everyday-at-5am-morning-android 你可以与我分享你的解决方案吗? – XoXo

使用挂起的意图

挂起的意图是你给到另一个应用程序令牌(例如,通知,告警管理或其他第三方应用程序),这使得这个其他应用程序使用你的应用程序的权限执行预定义的一段代码。

要通过挂起的意图执行广播,请通过PendingIntent类的getBroadcast()方法获取PendingIntent。要通过挂起的意图执行活动,您将通过PendingIntent.getActivity()接收活动。

或者

的PendingIntent +报警管理+广播接收器组合可以很好地工作,你必须注册,并在明显的动态unregistere广播接收器没有。像

public void onResume() 
    { 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
    registerReceiver(mybroadcast, filter); 

    } 

    public void onPause() 
    { 
    unregisterReceiver(mybroadcast); 
    } 
+0

我主要关心的是我应该在哪里实现这些代码?在我的应用程序中的哪个类? – Aradhna

+0

@aradhna自动播放闹钟,你必须创建一个服务类,在那里你必须为未决意图编码,好的,一旦你安装了应用程序服务,将保持在后台,不管你的应用程序关闭了,服务内的代码将运行在凌晨8点自动运行 –

+0

@aradhna或直接在您的服务类中为警报管理器编写代码,从splash screen.java或您的第一个活动中调用该服务类。 –