1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Broadcast Receiver ACTION_TIME_TICK

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Luser_k, 09.04.2010.

  1. Luser_k, 09.04.2010 #1
    Luser_k

    Luser_k Threadstarter Junior Mitglied

    Beiträge:
    29
    Erhaltene Danke:
    2
    Registriert seit:
    04.01.2010
    Hi,

    wie verstehe ich die Broadcast Receiver mit ACTION_TIME_TICK?

    Kann mir jemand da Licht reinbringen?

    Wird vom System wirklich nach jeder Minute ein Broadcast Intent abgeschickt, den man abfangen kann?

    Ich habe ein App, bei der man eine Erinnerung einstellt, also 3 Tage vor Datum X.

    Dann könnte ich ja die Differenz in Minuten vom eingestellten Datum bis zur Erinnerung zählen. Also die Zahl nach jedem ACTION_TIME_TICK dekrementieren.

    Anschließend wenn die Differenz == 0, dann rufe die gewünschte Erinnerungsactivity auf.

    Oder?

    Bitte um Hilfe in Android-Hilfe :)

    Gruß

    Luser_k
     
  2. ko5tik, 09.04.2010 #2
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Das halte ich für kein gute Idee. Erstens wird dei Broadcast receiver den Gerät aufwecken
    und batterie leersaugen. Außerdem wäre es davon auszugehen. das
    dein Gerät innnerhaöb von 3 Tagen neu gebutet wird - somit sind die alarms weg.

    Mein Vorschlag:

    1. Bestelle den Alarm mit:
    Code:
       alarmService.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, <time in millis seit 1.1.1970> ,pendingIntent);
    
    2. Bastle einen on-Boot Handler damit du es nach dem neustart wieder aktivieren kannst.

    Mein Beispiel, aber für alle 15 Minuten periodisch:
    Code:
    public class Activator extends BroadcastReceiver {
    
        public static final String INTENT = "de.pribluda.android.lines.ALARM";
    
        /**
         * it does not matter, which alarm we are receiving  - either from boot, or from
         * elapsed timeout
         *
         * @param context
         * @param intent
         */
    
        @Override
        public void onReceive(Context context, Intent intent) {
            System.err.println(" **************************** activating service - broadcast received");
    
            Intent alarmIntent = new Intent(INTENT);
    
            AlarmManager alarmService = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_NO_CREATE);
            //  no intent there, schedule it     
            if (pendingIntent == null) {
                pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
                // schedule new alarm in 15 minutes
                alarmService.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis() + AlarmManager.INTERVAL_FIFTEEN_MINUTES , AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
            }
    
    
        }
    }
    
    Und natürlich die Prmissions und Filter in dem Manifest nicht zu vergessen:
    Code:
      <receiver android:name="de.pribluda.games.android.util.Activator"
                      android:enabled="true"
                      android:exported="true"
                    >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                    <action android:name="de.pribluda.android.lines.ALARM"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </receiver>
      <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    
     

Diese Seite empfehlen