2016-04-03 5 views
1

tun Ich versuche, in Alarmmanager android.I zu lernen, kamen die über doc die Verwendung von AlarmManager.ELAPSED_REALTIME_WAKEUP .Aber zu verstehen, wenn ich dies in meiner app verwendet und wenn die App lief, i dass Alarmmanager klickte auf den zurück-Button denken wird wieder die Aktivität aufrufen, nachdem das Alarmintervall hier eingestellte ZeitWas genau macht AlarmManager.ELAPSED_REALTIME_WAKEUP in android

alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime()+10*1000, alarmIntent); 

Aber nichts happens.Please somenone die Bedeutung von AlarmManager.ELAPSED_REALTIME_WAKEUP erklären.

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private AlarmManager alarmMgr; 
    private PendingIntent alarmIntent; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, AlarmReceiver.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     alarmIntent = PendingIntent.getActivity(this, 0, intent,0); 
     Log.d("asd","initialized alarmintent"); 
     alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime()+10*1000, alarmIntent); 

         Log.d("asd", "alarm set"); 
    } 
} 

AlarmReceiver.java

public class AlarmReceiver extends AppCompatActivity 
{ 
    TextView tv; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.intent_layout); 
     Log.d("asd","writing textview"); 
     tv=(TextView)findViewById(R.id.textview); 
     tv.setText("called"); 
    } 
} 
+0

„Aber es passiert nichts“ - vielleicht gibt es ein Problem mit dem seltsam genannten 'AlarmReceiver', wie sie nicht registriert werden das Manifest. Überprüfen Sie LogCat für alle Nachrichten. – CommonsWare

+0

@ CommonsWare, ich habe den Eintrag für AlarmReceiver in Manifest-Datei gemacht. Es ist die Klasse, die ich rufe, wenn der Alarm ausgelöst wird. – a874

Antwort

1

würde ich AlarmManager.RTC_WAKEUP verwenden zu AlarmManager.ELAPSED_REALTIME_WAKEUP gegenüber. Hier ist ein Beispiel dafür, wie ich war mit Alarmmanager in einer aktuellen App:

MainActivity.class:

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

    Intent intent = new Intent(this, AlarmReceiver.class); 
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

    mAlarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 

    // Cancel any existing service(s) 
    mAlarmManager.cancel(pendingIntent); 

    // Start service 
    long alarmTime = System.currentTimeMillis() + 10000L; // 10 seconds from now 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     mAlarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent); 
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent); 
    } else { 
     mAlarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent); 
    } 
} 

AlarmReceiver.class:

public class AlarmReceiver extends BroadcastReceiver { 

    public AlarmReceiver() { } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "AlarmService Triggered.", Toast.LENGTH_SHORT).show(); 
     Log.d(this.getClass().getSimpleName(), "Service triggered"); 
    } 
} 

es wie Ihre AlarmReceiver Klasse scheint wurde erstreckt AppCompatActivity was nicht funktioniert - Sie müssen Broadcast Receiver erweitern, wie ich es getan habe. Dann in der onReceive() Funktion in AlarmReceiver, müssen Sie auf die gewünschte Aktivität navigieren, wie folgt aus:

Intent newIntent = new Intent(context, NewActivity.class); 
context.startActivity(newIntent); 

diese Änderungen versuchen und sehen, ob sie funktionieren!

+0

, Können Sie die Verwendung von AlarmManager.ELAPSED_REALTIME_WAKEUP erklären? – a874

+0

@ a874 eine Beschreibung hier - http://developer.android.com/training/scheduling/alarms.html#set - Wie der Leitfaden sagt, ist RTC mehr für tatsächliche "Alarme", während ELAPSED_REALTIME_WAKEUP mehr für die Planung von Aufgaben ist. Trotzdem bevorzuge ich RTC in meinen eigenen Implementierungen. – privatestaticint

0

Ihr Code sollte gut funktionieren. Machen Sie sicher, dass Ihre AlarmReceiver Aktivität im Manifest, so etwas wie erklärt:

<activity 
     android:name=".AlarmReceiver" 
     android:label="@string/title_activity_alarm_receiver" 
     android:theme="@style/AppTheme.NoActionBar"></activity>