2013-07-16 108 views
0

我正在開發一款android應用程序,每週設置一次鬧鐘。鬧鈴得到相應設定,一切正常。 當報警時間小於當前時間時,報警立即觸發。因此,爲了避免這種情況立即觸發我已經取消了它作爲每週設置一次鬧鐘

Intent intent = new Intent(AlarmClock.this, TaskRecieverForAlarm.class); 
intent.putExtra("AlarmDate", alarmdate); 
intent.putExtra("key", key); 
PendingIntent sender = PendingIntent.getBroadcast(AlarmClock.this, key , intent, 0); 

if(AlarmHrsInInt < currentHrs) 
{ 
    am.cancel(sender); 
} 

am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 7*1440*60000 ,sender); 

但如果這樣做,報警器沒有得到設定下一week.Instead的越來越取消當前的時間,它越來越甚至取消明年week.What我應該如何正確設置鬧鐘到下週? 請幫助。謝謝!

回答

0

嘗試

public static final long DAY_IN_MILLISEC = 1000 * 60 * 60 * 24; 

public void initAlarm(Context context) { 
    AlarmManager am = (AlarmManager) context 
      .getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, ReceiverClass.class); 
    i.setAction(ReceiverClass.ALARM_INVOKE_ACTION); 

    // /////Alarm Time 
    Calendar alarmCalendar = Calendar.getInstance(); 
    alarmCalendar.set(Calendar.HOUR_OF_DAY, 20); 
    alarmCalendar.set(Calendar.MINUTE, 40); 
    alarmCalendar.set(Calendar.SECOND, 0); 
    long time = alarmCalendar.getTimeInMillis(); 
    Calendar cal = Calendar.getInstance(); 

    if (time <= cal.getTimeInMillis()) 
     time = cal.getTimeInMillis() + DAY_IN_MILLISEC;// /Will set for the 
                 // next day 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, time, DAY_IN_MILLISEC, pi); // MilliSec 
                      // * 
                      // Sec 
                      // * 
                      // Mnt 
                      // * 
                      // Hour 
    // /***OR 
    // am.setRepeating(AlarmManager.RTC_WAKEUP, time, 
    // AlarmManager.INTERVAL_DAY * 1, pi); 
} 

ReceiverClass.java

public class ReceiverClass extends BroadcastReceiver { 
    public static final String ALARM_INVOKE_ACTION = "com.test.alarm"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     Log.e("action", "Action"); 
     if (action.equalsIgnoreCase(ALARM_INVOKE_ACTION)) { 
      Log.e("Alarm Invoke", "YES"); 
     } else if (action.equalsIgnoreCase(Intent.ACTION_TIME_CHANGED) 
       || action.equalsIgnoreCase(Intent.ACTION_TIME_TICK) 
       || action.equalsIgnoreCase(Intent.ACTION_TIMEZONE_CHANGED) 
       || action.equalsIgnoreCase(Intent.ACTION_DATE_CHANGED) 
       || action.equalsIgnoreCase(Intent.ACTION_REBOOT)) { 
      Log.e("RESET ALARM HERE.SET AGAIN", "YES"); 
     } 

    } 
} 

AndroidManifest.xml中添加 ...

<receiver android:name="com.hiddenbrains.ui.screens.ReceiverClass" > 
      <intent-filter> 
       <action android:name="com.test.alarm" /> 
       <action android:name="android.intent.action.DATE_CHANGED" />     
       <action android:name="android.intent.action.TIME_SET" /> 
       <action android:name="android.intent.action.TIMEZONE_CHANGED" /> 
       <action android:name="android.intent.action.TIME_TICK" /> 
       <action android:name="android.intent.action.REBOOT" /> 
      </intent-filter> 
     </receiver> 
+0

我想建議setrepeating這家公司de.Its工作正常。但第一次,我嘗試設置小於當前時間的報警時間,它立即再次觸發。此外,如果我設置的警報時間小於當前時間,則不會觸發警報。所有警報均會在下週正確設置。如何避免第一次立即觸發? – Mary

+0

nw檢查一次更新ans – user1140237

+0

我試過了,但警報沒有在下週觸發。 – Mary

0

問題只由@ user1140237

+0

我試過了,但是又一次警報立即觸發。 – Mary

+0

不檢查小時..我的意思是如果條件。將當前時間轉換爲毫秒,然後與以毫秒爲單位的報警調用時間進行比較 – user1140237

+0

您能指導我將當前時間轉換爲毫秒嗎? – Mary

相關問題