2016-04-03 21 views
1

Android'de AlarmManager'ı öğrenmeye çalışıyorum. AlarmManager.ELAPSED_REALTIME_WAKEUP kullanımını anlamak için doc ile karşılaştım. Ama bunu uygulağımda kullandığında ve uygulama başladığında, alarm aralık süresi buradaAlarmManager.ELAPSED_REALTIME_WAKEUP tam olarak ne yapar

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

set Ama hiçbir şey happens.Please somenone AlarmManager.ELAPSED_REALTIME_WAKEUP anlamını açıklamak sonra tekrar aktivitesine arayacak alarm yöneticisi düşünerek geri düğmesine tıkladım. AlarmManager.ELAPSED_REALTIME_WAKEUP aksine

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

"Ama hiçbir şey olmuyor" - belki garip adlı 'AlarmReceiver' ile ilgili bir sorun olduğunu, böyle bunun tescil verilmemesini de manifesto. Herhangi bir mesaj için LogCat'ı ​​kontrol edin. – CommonsWare

+0

@ CommonsWare, ben alarm dosya gönderildiğinde AlarmReceiver için giriş yaptım.Bu alarm tetiklendiğinde aradığım sınıf. – a874

cevap

1

Ben AlarmManager.RTC_WAKEUP kullanmak.

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: İşte son app AlarmManager kullanılarak nasıl bir örnektir

sizin AlarmReceiver sınıf AppCompatActivity uzanan gibi görünüyor
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"); 
    } 
} 

Bu işe yaramaz - yaptığım gibi Broadcast Receiver uzatmanız gerekir. Ardından, AlarmReceiver içinde onReceive() işlev içinde, böyle, istediğiniz Faaliyet gitmek gerekir:

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

bu değişiklikleri deneyin ve işe bakın!

+0

, AlarmManager.ELAPSED_REALTIME_WAKEUP kullanımını açıklayabilir misiniz? – a874

+0

@ a874 burada bir açıklamaya bakın - http://developer.android.com/training/scheduling/alarms.html#set - Kılavuzun belirttiği gibi, RTC gerçek "alarmlar" için daha fazla, ELAPSED_REALTIME_WAKEUP ise zamanlama görevleri için daha fazla. Bununla birlikte, kendi uygulamalarında RTC'yi tercih ediyorum. – privatestaticint

0

Sizin kodunuz düzgün çalışmalıdır. olun gibi bir şey manifest'te sizin AlarmReceiver aktivitesini ilan emin:

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