2016-02-25 69 views
0

我的應用程序鬧鐘管理器不起作用。我做這裏所描述的一切 https://developer.android.com/training/scheduling/alarms.html 但報警不起作用。
這是我的代碼:鬧鐘管理器不起作用

清單

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 

Reciever(Reciever在清單註冊)

@Override 
public void onReceive(Context context, Intent intent) { 

    Intent alarmIntent = new Intent(Constants.ALARM_INTENT); 
    alarmIntent.setClass(context, NotificationActivity.class); 
    alarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(alarmIntent); 
} 

活動

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

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.set(Calendar.HOUR_OF_DAY, 1); 
calendar.set(Calendar.MINUTE, 30); 

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
     calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

我不知道如何使它工作。請幫我解決它。

回答

0

首先,刪除SET_ALARM權限,因爲它在這裏不相關。

其次,您需要確保您的Calendar對象是未來。大多數情況下,您將會過去,因爲您使用的是calendar.set(Calendar.HOUR_OF_DAY, 1)set(Calendar.MINUTE, 30)。如果您在01:30之後執行此代碼,它將會在過去。在這種情況下,你需要有一天add(),以便明天在01:30。

第三,使用adb shell dumpsys alarm來查看是否安排了您的鬧鐘,一旦您進行上述修復。

第四,使用LogCat查看是否有來自您的代碼的任何警告或錯誤,例如AlarmReceiverNotificationActivity未在清單中註冊。

+0

@ Jackky777:'adb'是Android SDK中的一個程序,設計用於在命令行運行。 – CommonsWare

0

你問基於系統的經過實時時鐘這裏的報警:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
     calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

但是你基於通常的日曆時鐘傳遞給它的時間。如果你想要一個鬧鐘使用基於日曆的時鐘發生,說這個:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
     calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

ELAPSED_REALTIME_WAKEUPRTC_WAKEUP之間的differnce在javadoc

+0

這是正確的答案。 – someUser