首先新建一个广播接收器
//闹铃时间到了会进入这个广播,这个时候可以做一些该做的业务。 public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "闹铃响了", Toast.LENGTH_LONG).show(); } }
然后我们要在AndroidManifest注册这个接收器
<receiver android:name="com.example.alarmmanagerdemo.AlarmReceiver" android:process=":remote">
最后activity代码
package com.example.lastgps; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.example.lastgps.myclass.AlarmReceiver; import java.util.Calendar; import java.util.TimeZone; public class AlarmTest extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alarm_test); Intent intent = new Intent(AlarmTest.this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmTest.this, 0, intent, 0); long firstTime = SystemClock.elapsedRealtime(); // 开机之后到现在的运行时间(包括睡眠时间) long systemTime = System.currentTimeMillis(); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); // 这里时区需要设置一下,不然会有8个小时的时间差 calendar.setTimeZone(TimeZone.getTimeZone("GMT+8")); //设置闹钟,时分秒毫秒 calendar.set(Calendar.MINUTE, 46); calendar.set(Calendar.HOUR_OF_DAY, 9); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); // 选择的定时时间 long selectTime = calendar.getTimeInMillis(); // 如果当前时间大于设置的时间,那么就从第二天的设定时间开始 if(systemTime > selectTime) { Toast.makeText(AlarmTest.this,"设置的时间小于当前时间", Toast.LENGTH_SHORT).show(); calendar.add(Calendar.DAY_OF_MONTH, 1); selectTime = calendar.getTimeInMillis(); } // 计算现在时间到设定时间的时间差 long time = selectTime - systemTime; firstTime += time; // 进行闹铃注册 AlarmManager manager = (AlarmManager)getSystemService(ALARM_SERVICE); manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, AlarmManager.INTERVAL_DAY, sender); Log.i("AlarmTest","time ==== " + time +", selectTime ===== " + selectTime + ", systemTime ==== " + systemTime +", firstTime === " + firstTime); Toast.makeText(AlarmTest.this,"设置重复闹铃成功! ", Toast.LENGTH_LONG).show(); } }
这样子就可以了