2012-05-21 121 views
13

我需要在10秒鐘後(例如)啓動活動AlarmReceiver。我需要它在沒有運行應用程序的情況下被激活。但是,無論應用程序是否運行,AlarmReceiver都不會被調用。有什麼建議麼?AlarmManager不工作

Intent intent = new Intent(this, AlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 111, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

//alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
              //+ (10 * 1000), pendingIntent); 
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show(); 
+0

你試過@Pratik D的答案? –

回答

26
public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      String message = "Hellooo, alrm worked ----"; 
      Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 
      Intent intent2 = new Intent(context, TripNotification.class); 
      intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(intent2); 
    } 

    public void setAlarm(Context context){ 
     Log.d("Carbon","Alrm SET !!"); 

     // get a Calendar object with current time 
     Calendar cal = Calendar.getInstance(); 
     // add 30 seconds to the calendar object 
     cal.add(Calendar.SECOND, 30); 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     // Get the AlarmManager service 
     AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 
    } 
} 

這是最後的代碼,我設法得到工作。您需要添加

<receiver android:process=":remote" android:name="AlarmReceiver"></receiver> 

正好在Manifest文件中的</application>標記之上。

這將設置警報,以在30秒觸發調用方法SetAlarm()

+0

@Alex @ dinesh707哪裏調用了SetAlarm()? – Neo

+8

更正:接收器部分必須位於應用程序標籤內! –

+1

@JamesCameron您保存了我的夜晚好友.. – learner

6

截至目前,這是不可能的,但不運行應用程序啓動報警,則必須運行一次你們各自的應用程序來激活您的報警.. 對於這個....!

你ALARM_ACTIVITY:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

Intent intent = new Intent(ALARM_ACTIVITY.this,ALARM_RECEIVER.class); 

PendingIntent pendingIntent = PendingIntent.getBroadcast(SetReminder.this, ID, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeInMillis() + 1000, pendingIntent); 

在你ALARM_RECEIVER

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

notification = new Notification(R.drawable.alarmicon, "charSequence", System.currentTimeMillis()); 

notification.setLatestEventInfo(context, "alarmTitle", "charSequence", pendingIntent); 

notification.flags |= Notification.FLAG_AUTO_CANCEL; 

notificationManager.notify(1, notification); 
-1

此外之後,除了上述之外,我認爲在AlarmActivity方法應該是在啓動活動的onCreate方法..在這種情況下,報警活動應該是應用程序的LAUNCHER活動。這解決了我的問題

3

如果它仍然沒有工作擺脫android:process=":remote"部分可能會有所幫助。爲我工作:)