0

的android我要在指定的時間使用廣播接收器AlaramManager設置報警並實現在指定的時間(一天)的通知。如何在AlaramManger和廣播接收器

它報警指定的時間。當我運行應用程序後,即使它不是我設置的時間,它也會再次報警。

換句話說,當我在9:21 pm設置鬧鐘並在9點21分後運行應用程序時,會生成通知。

我只是想在指定的時間發出警報通知,我設置和應用程序不運行。 另外,當我運行該應用程序時,它不報警。

我該如何解決?

這是我的廣播接收器代碼 -

public class BroadcastD extends BroadcastReceiver{ 
    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     this.context = context; 

     showNotification(); 

} 

    public void showNotification() { 
     NotificationManager notificationManager = 
       (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     PendingIntent pendingIntent = PendingIntent 
      .getActivity(context, 0, new Intent(context, MainActivity.class), 
        PendingIntent.FLAG_UPDATE_CURRENT); 

     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
     builder.setSmallIcon(android.R.drawable.ic_dialog_alert) 
      .setTicker("Ticket") 
      .setContentTitle("Title") 
      .setContentText("Context") 
      .setWhen(System.currentTimeMillis()) 
      .setAutoCancel(true) 
      .setContentIntent(pendingIntent); 

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

這是我的MainActivity代碼:

public class MainActivity extends AppCompatActivity { 
    AlarmManager am ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     am = (AlarmManager) getSystemService(ALARM_SERVICE); 

     AlarmHATT alarmHATT = new AlarmHATT(getApplicationContext()); 
     alarmHATT.Alarm(); 
} 
public class AlarmHATT { 
    private Context context; 

    public AlarmHATT(Context context) { 
     this.context = context; 
    } 

    public void Alarm() { 
     Intent intent = new Intent(context.getApplicationContext(), BroadcastD.class); 
     PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); 

     Calendar calendar = Calendar.getInstance(); 

     calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 
       calendar.get(Calendar.DATE), 21, 21, 0); 

     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, sender); 
    } 
} 
+0

如果您設置了過去的時間,那麼alarmManager會啓動這種正常行爲。只有通過設置正確的時間,你才能避免。 – Opiatefuchs

+0

我能夠避免報警的另一種方式是什麼?如果你知道,請教我。謝謝。 –

+0

只是不要設置過去的時間。問題是,你爲什麼要設定過去的時間?這是沒有意義的,沒有人需要通知已經過去的事件..... – Opiatefuchs

回答

-2

嘗試下面的代碼set alarm上指定的時間。

am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
+0

我已經試過了。但它也是這樣做的。 –

1

爲了避免立即具有火警,與Calendar這樣的配置開始時間:

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 

calendar.set(Calendar.HOUR_OF_DAY, 9); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 0); 

,然後如果你正在設置時間今天已經過去了,你需要設置日曆下面的一天:

calendar.add(Calendar.DATE, 1); 

這將避免你的火警立即使用,因爲它被設置爲已經在當天早些時候通過的時間。

然後繼續使用calendar.getTimeInMillis()作爲您的開始時間。