Android Can';t将AlarmManager设置为重复

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

我试图设置一个闹钟,每30秒叫醒一次,但它不起作用。它在开始时只运行一次。我不确定是否必须使用setInexactRepeating或setRepeating或setExact(并回忆该方法);如果我应该使用已用\u实时\u唤醒RTC\u唤醒

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);
}