我已经为Android创建了一个祈祷时间应用程序,其中包括athan时间的警报,但有一定时间剂量在正确的时间唤醒设备将迟到

这是我的警报意图

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" />
.

请帮我纠正它

有帮助吗?

解决方案

为什么你不尝试使用

getWindow()。addflags(windowmanager.layoutparams.flag_keep_screen_on);

按此线程推荐 wakelock和flag_keep_screen_on?

如果出现警报,它会更有意义。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top