Al Ryan Acain
Al Ryan Acain

Reputation: 556

WakeLock not turning on the screen

I am trying to create a basic alarm clock app. I set the alarm using the setExact method of the AlarmManager. And then I created a BroadcastReceiver that will display a toast and will start a new activity when the previously set alarm goes off. I also have a WakeLock in my BroadcastReceiver to try to turn on the screen. The BroadcastReceiver is working. It is able to receive the event and then created the activity. But the screen is not turning on. I've read and followed a lot of answers of posts like this in SO but I still cant make it work.

This is my code for setting the alarm:

alarmIntent = Intent(context, AlarmReceiver::class.java).let { intent ->
        PendingIntent.getBroadcast(context, 1, intent, 0)
    }

val alarmTime = Calendar.getInstance().apply {
                timeInMillis = System.currentTimeMillis()
                set(Calendar.HOUR_OF_DAY, alarmForm.time.get(Calendar.HOUR_OF_DAY))
                set(Calendar.MINUTE, alarmForm.time.get(Calendar.MINUTE))
                set(Calendar.SECOND, 0)
            }

alarmManager.setExact(
                AlarmManager.RTC_WAKEUP,
                alarmTime.timeInMillis,
                alarmIntent
            )

This is my BroadcastReceiver:

class AlarmReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {

        val wakeLock: PowerManager.WakeLock =
            (context.getSystemService(Context.POWER_SERVICE) as PowerManager).run {
                newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply {
                    acquire(10*60*1000L /*10 minutes*/)
                }
            }

        Toast.makeText(context, "Wake Up!", Toast.LENGTH_LONG).show()

        val alarmDisplayIntent = Intent(context, AlarmDisplayActivity::class.java)
        alarmDisplayIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        context.startActivity(alarmDisplayIntent)

        wakeLock.release()
    }
}

And this is the activity I display when alarm goes off:

class AlarmDisplayActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_alarm_display)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }

    override fun onResume() {
        super.onResume()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
            setTurnScreenOn(true)
        }
    }
}

I am using a phone with android version 9. My minSdkVersion is 21. What do you think I am doing wrong or am I missing something?

Upvotes: 0

Views: 606

Answers (0)

Related Questions