2013-07-19 67 views
9

嗨我目前正在使用AlarmManager。我寫了下面給出的代碼。根據代碼,AlarmManager應該在10秒後觸發,但是在我的代碼中,警報管理器立即觸發。請幫忙。立即觸發報警管理器

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; 
     long timeOrLengthofWait = 10000; 
     Intent intentToFire = new Intent(this, AlarmReciever.class); 
     PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0); 
     alarmManager.set(alarmType, timeOrLengthofWait, alarmIntent); 
    } 
} 

而且我AlarmReciever類

public class AlarmReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     String phoneNumberReciever="5556"; 
     String message="Alarm Triggered"; 
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumberReciever, null, message, null, null); 
     Toast.makeText(context," A message has been sent", Toast.LENGTH_LONG).show(); 

     Log.d("Alarm ", "Alarm Has been triggered and sms send"); 
    } 
} 

我的清單已經添加所需的權限。

回答

10

您正在使用的報警類型爲ELAPSED_REALTIME_WAKEUP。這意味着set()的第二個參數必須是從現在起的毫秒數,現在表示爲SystemClock.elapsedRealtime()

如果你的目標是讓這種情況發生10000毫秒從您做出set()通話的時候,提到set()調用應該是:

alarmManager.set(alarmType, SystemClock.elapsedRealtime()+timeOrLengthofWait, alarmIntent); 
+0

非常感謝你的幫助和工作:) –

+2

作爲一個adition,documentarion說:「如果你指定的觸發時間是過去,報警立即觸發。」您在問題中提供的10000的時間戳肯定代表過去的日期。這是您的鬧鐘立即觸發的原因。 更多信息請訪問https://developer.android.com/training/scheduling/alarms.html#set – androidevil

11

如果你在過去的時間報警的創建的PendingIntent這將是立即開火。示例 - 今天上午8點安排鬧鐘,但在11AM左右執行代碼將立即開始。

解決方案:

cal.add(Calendar.DATE, 1); 

long delay = 24 * 60 * 60 * 1000; 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), delay,pendingIntent);` 

這將在指定的時間(即)上午8時開槍第二天的事件;

+3

「如果您正在爲過去的時間創建警報的PendingIntent,它將立即被觸發」。幫了我很多。 – androidStud