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の他の投稿からこの例のコードを取得しますなぜToaskALARM!!! すぐに表示されます???

4

2 に答える 2

2

過去の時刻の場合は、すぐにアラームが鳴ります。スケジュールされたこのインテントのアラームがすでに存在する場合(filterEquals(Intent)によって定義されている2つのインテントが等しい場合)、それは削除され、このインテントに置き換えられます。

1000 * 10以降にアラームが必要な場合は、システムを使用してください。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 に答える