1. 程式人生 > >AlarmManager鎖屏後設置的定時被取消的解決方案

AlarmManager鎖屏後設置的定時被取消的解決方案

我用alarmmanager設定了定時任務,但是鎖屏的時候根本不會執行。查了大量資料,還是無法解決,有好的辦法嗎?(測試手機:華為相關程式碼如下:
if (Build.VERSION.SDK_INT >= 19) {
                            mAlarmManager.setExact(AlarmManager.RTC_WAKEUP,
                                    course.getStartTime().getTimeInMillis(),
                                    vibrationPI);

                            mAlarmManager.setExact(AlarmManager.RTC_WAKEUP,
                                    course.getEndTime().getTimeInMillis(),
                                    normalPI);
                        } else {
                            mAlarmManager.set(AlarmManager.RTC_WAKEUP,
                                    course.getStartTime().getTimeInMillis(),
                                    vibrationPI);

                            mAlarmManager.set(AlarmManager.RTC_WAKEUP,
                                    course.getEndTime().getTimeInMillis(),
                                    normalPI);
                        }


public class SetVibrationService extends IntentService {
    private static final String NAME = "SetVibrationService";
    private static final int NOTIFICATION_ID = 1;

    public SetVibrationService() {
        super(NAME);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        AudioManager audioManager =
                (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 1);

        NotificationUtil.
                sendNotification(this, NOTIFICATION_ID, R.string.vibrate_service_notification_text);
        Log.d("ApplicationLog", "VibrateService" + new Date());
    }
}


public class SetNormalService extends IntentService {
    private static final String NAME = "SetNormalService";
    private static final int NOTIFICATION_ID = 2;

    public SetNormalService() {
        super(NAME);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        AudioManager audioManager =
                (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 2, 1);

        NotificationUtil.
                sendNotification(this, NOTIFICATION_ID, R.string.normal_service_notification_text);

        Log.d("ApplicationLog", "NormalService" + new Date());
    }
}