0

我試圖在上午9:00創建一個自動通知。定時通知(Android)的一些問題?

我創建了以下代碼,但我無法獲得自動通知。

而且,我在Android Manifest文件中添加了所需的權限。

MainActivity.classonCreate方法我調用的函數: setAlarm();

public void setAlarm() { 

    AlarmManager alarmMgr; 
    PendingIntent alarmIntent; 

    alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(getApplicationContext(), Notifications.class); 
    alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 1001, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Calendar calendar_now = Calendar.getInstance(); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, 9); 
    calendar.set(Calendar.MINUTE, 30); 

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 1, alarmIntent); 

    if(calendar_now.getTimeInMillis() == calendar.getTimeInMillis()) { 
    new Notifications().createNotification(getApplicationContext(), getIntent(), "Stock-Market Alert", "The Market opens shortly."); 
    } 

} 

的Notifications.class如下:

public class Notifications extends BroadcastReceiver { 

    public void onReceive(Context context, Intent intent) { 
    String notificationTitle = "Default Title", notificationMessage = "Default Message"; 

    createNotification(context, intent, notificationTitle, notificationMessage); 
    } 

    public void createNotification(Context context, Intent intent, String notificationTitle, String notificationMessage) { 

    NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 1001, 
       new Intent(context, Repeating_activity.class), PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
      .setSmallIcon(android.R.drawable.arrow_up_float) 
      .setContentTitle(notificationTitle) 
      .setContentText(notificationMessage) 
      .setTicker("Alert Message !") 
      .setAutoCancel(true) 
      .setSmallIcon(android.R.drawable.stat_sys_warning); 

    builder.setContentIntent(pendingIntent); 
    builder.setDefaults(NotificationCompat.DEFAULT_VIBRATE); 
    builder.setDefaults(NotificationCompat.DEFAULT_SOUND); 

    notificationManager.notify(1001, builder.build()); 
    } 
} 

回答

0

發生這種情況,因爲你試圖比較毫秒,很少你會匹配相同的毫秒(幾乎從不說)。此外,添加邏輯以比較Receiver上的時間。試試下面的代碼:

public void onReceive(Context context, Intent intent) { 
    Calendar cal = Calendar.getInstance(); 
    int currentHour = cal.get(Calendar.HOUR); 
    int currentMinute = cal.get(Calendar.MINUTE); 
    if (currentHour == 9 && currentMinute == 00) { 
     String notificationTitle = "Default Title", notificationMessage = "Default Message"; 
     createNotification(context, intent, notificationTitle, notificationMessage); 
    } 
} 

而且你setAlarm()方法可以簡單這樣的:

public void setAlarm(){ 
     AlarmManager alarmMgr; 
     PendingIntent alarmIntent; 

     alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(getApplicationContext(), Notifications.class); 
     alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 1001, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 1, alarmIntent); 

    } 
+0

對不起仍然一無所獲。當我刪除時間約束並使用onClick(),通知出現,但沒有任何與我們上面的代碼:( –

+0

是你的BroadcastReceiver在AndroidManifest.xml中聲明?嘗試發送一個Intent onClick()來檢查是否問題是AlarmManager或Receiver。 –

+0

沒有問題。OnClick,通知的作品 –