2016-05-07 14 views
-29

Ich baue einen Alarm, der nach 90 Tagen ausgelöst wird ..? Jetzt brauche ich ein paar Vorschläge, wie der Alarm beim Ausschalten des Geräts reagiert.! Jeder hier, um mir zu helfen .. Ich habe viele Tutorials scheinen sie waren stundenlang nicht für Tage.!wie Gebäude 90 Tage Alarm Android.?

+5

Warum nicht nur sehen, wie viele Stunden in 90 Tagen sind? – Laurel

+1

Vielleicht nur 90 * 24 * 60 * 60 * 1000 Millisekunden verwenden würde funktionieren? Realisieren Sie einfach das Set Alarm dauert lange statt int, so sollte dies funktionieren Ich denke – Elye

+0

Gibt es ein Beispiel für Alarm-Manager ..? @ Elye –

Antwort

1

den Alarm in Ihrem Activity/Fragment Stellen Sie den AlarmManager für sChE mit Jede Aufgabe für die Zukunft.

long 90_day_interval= (System.currentTimeMillis())+(90*24*60*60*1000) ; ///FOR THE 90 DAYS TIME STAMP 

Und nun wie unten die Zeit 90_day_interval in Ihrer Klasse Alarmmanager eingestellt werden: -

 Intent myIntent = new Intent(YOUR_CONTEXT, GetNotificationAlarm.class); /// GetNotificationAlarm is the class which , we need to create to handle the Alarm 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(SplashActivity.this, 0, myIntent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, 90_day_interval, pendingIntent); 

Und als die GetNotificationAlarm.java Klasse erstellen die zukünftige Aufgabe zu erhalten.

public class GetNotificationAlarm extends WakefulBroadcastReceiver { 
    @Override 
    public void onReceive(final Context context, Intent intent) { 

     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     Ringtone r = RingtoneManager.getRingtone(context, notification); 
     r.play(); 


    } 
} 

Und vergessen Sie nicht den Eintrag für Empfänger innerhalb des Manifest (im < Anwendung> .....</application>)

 <receiver 
      android:name=".GetNotificationAlarm " 
      android:exported="true" > 
     </receiver> 

Und u müssen die WAKE_LOCK Erlaubnis für sie wie unten hinzuzufügen: -

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 

HINWEIS: - Sobald Ihr Alarmplan ist, als dass es machen überprüfen sollte nicht für die nächsten 90 Tage neu geplant werden ... Nach 90 Tagen müssen Sie den Alarm planen.

28

90 Tage später

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, 90); 
long ninetyDaysLater = calendar.getTimeInMillis(); 

Einrichtung der Alarm

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, ninetyDaysLater, YOUR PENDING INTENT); 

auch dessen bewusst sein, von doc

Standardmäßig werden alle Alarme gelöscht werden, wenn ein Gerät abschaltet . Um dies zu verhindern, können Sie Ihre Anwendung so konfigurieren, dass ein wiederholter Alarm automatisch neu gestartet wird, wenn der Benutzer das Gerät neu startet. Dies stellt sicher, dass der AlarmManager seine Aufgabe weiterhin ausführt, ohne dass der Benutzer den Alarm manuell neu starten muss.

+2

Glaube an die Menschheit wiederhergestellt. – azizbekian

+2

kann nicht glauben * Menschen * immer noch so hilfreich zu [** helpvamps **] (https://meta.stackexchange.com/q/19665/199867) – Gattsu

+0

Denken Sie nur an den Typ, der es spielte ... : P –

1

diesen Code Versuchen:

private void schedule(){ 
     final Calendar calendar = Calendar.getInstance(); 
     String alarmTime = ""+calendar.get(Calendar.HOUR_OF_DAY)+":"+calendar.get(Calendar.MINUTE)+":00"; 
     String alarmDate = ""+(calendar.get(Calendar.MONTH)+1)+"/"+(calendar.get(Calendar.DAY_OF_MONTH))+"/"+calendar.get(Calendar.YEAR); 
     String alarmDateTime = alarmDate +" "+ alarmTime; 
     Intent intent = new Intent(context, AlarmService.class); 
     final int _id = Integer.parseInt(""+MCZManagers.timeToMillies(alarmTime)); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, _id, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, dateTimeToMillies(alarmDateTime), pendingIntent); 
     Toast.makeText(context, "Alarm Set", Toast.LENGTH_LONG).show(); 
    } 

    public static long dateTimeToMillies(String givenDateString){ 
//  String givenDateString = "Tue Apr 23 16:08:28 GMT+05:30 2013"; 
//  SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss"); 
     long timeInMilliseconds = 0; 
     try { 
      Date mDate = sdf.parse(givenDateString); 
      timeInMilliseconds = mDate.getTime(); 
      System.out.println("Date in milli :: " + timeInMilliseconds); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return timeInMilliseconds; 
    } 

das Datum und die Zeit in Millisekunden umrechnen und in den Alarm eingestellt. Hoffe, das kann helfen.

1

Vorschlag zur Blackkara Kommentar des

https://stackoverflow.com/a/37099713/7804980

Sie können alle IO orientierte Klassen in Java wie Filewriter oder BufferedWriter verwenden, um die wichtigen Variablen zu speichern, die nicht müssen neu geschrieben werden, wann immer das Programm hingerichtet.

Betrachten dieser Algorithmus

if (heute ist das Datum) {
      in die Datei schreiben die wichtigen Variablen (wie der 90. Tag und der Tag begann)
} else {
    Lese die Datei und starten Sie
Abzählen}