Будильник не будит устройство

Я создал приложение для молитвы для Android, которое включает будильник в определенное время, но какое-то время не разбудит устройство в нужное время, будет поздно.

это мое намерение будильника

public class AlarmScreenActivity extends Activity {

public final String TAG = this.getClass().getSimpleName();

private WakeLock mWakeLock;
private MediaPlayer mPlayer;
private static final int WAKELOCK_TIMEOUT = 60 * 4000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Setup layout
    this.setContentView(R.layout.activity_alarm_screen);

    // Set the window to keep screen on
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

    // Acquire wakelock
    PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
    if (mWakeLock == null) {
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK , TAG);
    }

    if (!mWakeLock.isHeld()) {
        mWakeLock.acquire();
        Log.i(TAG, "Wakelock aquired!!");
    }


    Button dismissButton = (Button) findViewById(R.id.alarm_screen_button);
    dismissButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            mPlayer.stop();
            finish();
        }
    });
    dismissButton.setTypeface(face);
    dismissButton.setText(res.getString(R.string.rd_ok));
    //Play alarm tone
    mPlayer = new MediaPlayer();
    try {
        Uri toneUri = Uri.parse(tone);
        mPlayer.setDataSource(this, toneUri);
        mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
        mPlayer.prepare();
        mPlayer.start();


    } catch (Exception e) {
        e.printStackTrace();
    }

    //Ensure wakelock release
    Runnable releaseWakelock = new Runnable() {

        @Override
        public void run() {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

            if (mWakeLock != null && mWakeLock.isHeld()) {
                mWakeLock.release();
            }
        }
    };

    new Handler().postDelayed(releaseWakelock, WAKELOCK_TIMEOUT);
}

@Override
protected void onPause() {
    super.onPause();

    if (mWakeLock != null && mWakeLock.isHeld()) {
        mWakeLock.release();
    }

}

@Override
protected void onDestroy() {
    super.onDestroy();

    if (mPlayer.isPlaying()) {
        mPlayer.stop();
    }
}

}

и я добавил разрешение в файл androidmanifest

<uses-permission android:name="android.permission.WAKE_LOCK" />

пожалуйста, помогите мне исправить это


person Kosrat D. Ahmad    schedule 29.07.2014    source источник
comment
какова ваша целевая сборка? Начиная с Kitkat, поведение Alarm API по умолчанию таково, что оно неточное. См. функцию setExact в диспетчере тревог (или установите целевую сборку на Jellybeans)   -  person Umair    schedule 16.09.2014


Ответы (1)


Почему бы тебе не попробовать с

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

как рекомендовано в этой теме Разница между Wakelock и FLAG_KEEP_SCREEN_ON?

Имеет больше смысла, если это для сигнализации.

person Teodor Kostadinov    schedule 29.07.2014
comment
я использовал его, но будет поздно просыпаться снова - person Kosrat D. Ahmad; 30.07.2014
comment
Почему было бы больше смысла для сигнализации? Будильник должен разбудить устройство. FLAG_KEEP_SCREEN_ON просто удерживает экран включенным, ЕСЛИ он включен, верно? - person Dpedrinha; 24.11.2014