2014-03-07 152 views
6

我在我的應用程序中使用AlarmManager來設置特定時間的鬧鐘。我用AlarmManager.RTC_WAKEUP來設置鬧鐘。當我測試相同的時候,它正在處理諸如Lg optimus,Sony Xperia等設備的數量。但是當在Samsung Galaxy S3中測試相同的應用程序時,我發現鬧鐘不工作。我仍然無法理解爲什麼會發生這種情況。AlarmManager.RTC_WAKEUP不適用於某些設備

我使用下面的代碼來設置報警: -

  // create the object 
      AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 

      //set the alarm for particular time 

      alarmManager.set(AlarmManager.RTC_WAKEUP,cal1.getTimeInMillis(), PendingIntent.getBroadcast(getActivity(),reminderId, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT)); 

有人請幫助我解決這個奇怪的問題。任何幫助將是可觀的。 謝謝

+0

最好發佈代碼,您也可以在其中創建cal1。 –

+0

順便說一句你可以定義什麼「不工作」的含義?它不會開火或在錯誤的時間開火?我已經在S3上進行了測試,通常它和其他任何設備一樣。 –

+0

@confused_at_times,它根本不會引發問題..... –

回答

3

我不確定,但聽起來問題是你設置cal1的時間和可能不同的時區的方式。

+0

但我正在測試應用程序的設備都在同一時區。 –

0

我不確定你遇到的具體問題是什麼,但是你可以嘗試用system.currentTimeMillis()+你的時間增量以ms爲單位替換cal1.getTimeinMillis()。這對我一直工作。

+0

但我確實需要cal1.getTimeinMillis(),因爲它是用戶定義的時間,我不想系統時間.... –

+0

對不起,部分如果我的帖子消失了。現在更新。這可能不是一個可接受的解決方案,取決於您的應用的功能。 –

+0

好吧,讓我檢查一下.......... –

0

嗨我有一個示例代碼,我已測試所有措施設備,它工作正常。 請試試這個演示郵政編碼希望它會在個案

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pendingIntent); 

更多的工作:http://www.androidhub4you.com/2013/12/android-alarm-manager-example-how-to.html

+0

爲什麼我應該使用setRepeating()代替Alarm Manager的set()方法? –

+0

請勿使用重複。根據您的修改 - alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),10000,pendingIntent); –

+0

那麼這將是我現在使用的相同的代碼,有什麼區別? –

0

我認爲你必須在你的「CAL1」對象的問題;
當您在日曆對象中設置時間時,實際設置月份時,不應使用月份的精確數值;
例如: - April = 4,您必須使用3而不是4
我在API Level 19中遇到了這個問題,但不知道其他問題。
這個問題可能會給你更好的解釋。 Why month give wrong value

public Calendar c = Calendar.getInstance(); 
       c.set(Calendar.YEAR,2014); 
       c.set(Calendar.MONTH, 03);//One minus from actual month numeric value 
       c.set(Calendar.DATE, 24); 
       c.set(Calendar.HOUR_OF_DAY,16);     
       c.set(Calendar.MINUTE, 39); 
        c.set(Calendar.SECOND, 0); 
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pi); 
0

是您的測試得到通過長時間的Android OS錯誤https://code.google.com/p/android/issues/detail?id=2880絆倒了?如果時鐘倒退,則Intent.ACTION_DATE_CHANGED廣播將不會被傳送,直到時鐘達到將變爲的鬧鐘時間。 (重新啓動以重置此損壞狀態。)這是因爲此Intent基於AlarmManager警報,該警報在時鐘更改時不會更新。

這種情況在正常使用中很少見。但是在測試報警代碼時經常發生。

如果您正在通過調整時鐘測試AlarmManager警報,則通過調整時鐘,AFAIK設置爲任何Android設備上的目標日曆的任何警報都會混亂。每當時鐘調整時,您都可以通過重新安排鬧鐘來解決這個問題。這假設系統正確地廣播Intent.ACTION_TIME_CHANGED,所以你可以知道什麼時候調整。 (該意圖是錯誤的,它不像Intent.ACTION_DATE_CHANGED,當日期由於時間流逝而發生變化時發生。)

+0

但是如果我將時間設置爲未來時間,那麼對於某些設備問題將保持不變? –

+0

假設這是您遇到的問題,AFAIK AlarmManager問題會在所有基於日曆的鬧鐘通過調整時鐘而混亂的Android設備上發生。除了Intent.ACTION_DATE_CHANGED之外,我對於向前調整和向後調整都不確定,這是通過警報實現的。我相信您可以通過在時鐘調整時重新安排鬧鐘或在調整時鐘後安排鬧鐘來解決此問題。 – Jerry101

相關問題