0

我正在学习在 Android 中使用 AlarmManager。我在谷歌上找例子,我发现stackoverflow.com 我有一堂课

public class Alarm extends BroadcastReceiver 
{    
     @Override
     public void onReceive(Context context, Intent intent) 
     {   
         PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
         PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TESTTEST");
         wl.acquire();

         // Put here YOUR code.
         Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example

         wl.release();
     }

 public void SetAlarm(Context context)
 {
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     Intent i = new Intent(context, Alarm.class);
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
     am.set(AlarmManager.RTC, 1000 * 10 , pi); // Millisec * Second * Minute    
 }

 public void CancelAlarm(Context context)
 {
     Intent intent = new Intent(context, Alarm.class);
     PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
     alarmManager.cancel(sender);
 }
}

还有我的活动

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        alarm = new Alarm();
        alarm.SetAlarm(getApplicationContext());


    }

我从 stackoverflow.com 上的其他帖子中获得了这个示例代码 为什么 Toask ALARM !!!立即显示???

4

2 回答 2

2

如果时间发生在过去,将立即触发警报。如果这个 Intent 调度已经有一个警报(两个 Intent 的相等性由 filterEquals(Intent) 定义),那么它将被删除并替换为这个。

如果您希望在 1000 * 10 之后发出警报,请使用 System. System.currentTimeMillis()+1000*10;

于 2013-01-24T05:45:38.307 回答
0

10秒,最好用这个...

am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 10*1000, pi);
于 2013-01-24T07:57:17.667 回答