Android Can';t将AlarmManager设置为重复
我试图设置一个闹钟,每30秒叫醒一次,但它不起作用。它在开始时只运行一次。我不确定是否必须使用setInexactRepeating或setRepeating或setExact(并回忆该方法);如果我应该使用已用\u实时\u唤醒或RTC\u唤醒Android Can';t将AlarmManager设置为重复,android,service,alarmmanager,android-5.0-lollipop,Android,Service,Alarmmanager,Android 5.0 Lollipop,我试图设置一个闹钟,每30秒叫醒一次,但它不起作用。它在开始时只运行一次。我不确定是否必须使用setInexactRepeating或setRepeating或setExact(并回忆该方法);如果我应该使用已用\u实时\u唤醒或RTC\u唤醒 public void onClick(View view) { alarmMethod(this); } public static void alarmMethod(Context context) { Intent myInten
public void onClick(View view) {
alarmMethod(this);
}
public static void alarmMethod(Context context) {
Intent myIntent = new Intent(context, LocalWordService.class);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(context, 0 ,myIntent, 0);
Calendar cur_cal = new GregorianCalendar();
cur_cal.setTimeInMillis(System.currentTimeMillis());//set the current time and date for this calendar
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MINUTE, cur_cal.get(Calendar.MINUTE) + 1);
cal.set(Calendar.SECOND, 30);
alarmManager.cancel(pendingIntent);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000 * 30, pendingIntent);
Log.d("MainActivity", "Alarm at = " + cal.getTime().toString());
Toast.makeText(context, "Start Alarm", Toast.LENGTH_SHORT).show();
}
我的服务是:
public class LocalWordService extends Service {
@Override
public IBinder onBind(Intent arg0) {
Toast.makeText(getApplicationContext(), "onBind", Toast.LENGTH_SHORT).show();
return null;
}
@Override
public void onCreate(){
Toast.makeText(getApplicationContext(), "WAKE UP!!!", Toast.LENGTH_SHORT).show();
Log.d("Service", "ActualTime : " + DateFormat.getDateInstance().getCalendar().getTime().toString());
//MainActivity.alarmMethod(getApplicationContext());
}
}
PS:我正在用Android棒棒糖设备进行测试。(5.0.2)
将代码从onCreate()
放到onStart命令()
因为我认为您正在使用报警接收器的onReceive()
中的startService()
。第一次它创建您的服务并调用onCreate()
,但在调用startService()
30秒后,服务已经创建,因此它调用onStartCommand()
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(), "WAKE UP!!!", Toast.LENGTH_SHORT).show();
Log.d("Service", "ActualTime : " + DateFormat.getDateInstance().getCalendar().getTime().toString());
//MainActivity.alarmMethod(getApplicationContext());
return super.onStartCommand(intent,flags,startId);
}