Reputation: 413
I am making an alarm app and I'm at the stage where I need to display the alarm screen (AlarmActivity) as onReceive from BroadcastReceiver is called. Here are the things I need to achieve when it's time for alarm to ring.
I have tried this code, but it doesn't work. Start activity even when screen is turned off
onCreate of my main activity is..
setContentView(R.layout.activity_main);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent myIntent1 = new Intent(this, AlarmReceiver.class);
myIntent1.putExtra("msg", "Wake up Wake up1");
myIntent1.putExtra("repeat", 0);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this, 2571123, myIntent1, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 48);
calendar.set(Calendar.SECOND, 00);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent1);
It sets the alarm on certain time.
This is my AlarmReceiver class.
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Log.d("ALARMONMATE",msg);
Intent intent1 = new Intent(context, SampleAlarmActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent1.putExtra("msg",msg);
context.startActivity(intent1);
Here is my AlarmActivity.java, the screen I want to display on alarm call.
public class SampleAlarmActivity extends AppCompatActivity {
private PowerManager.WakeLock wake = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample_alarm);
Intent intent = getIntent();
String msg = intent.getStringExtra("msg");
TextView txt = findViewById(R.id.textView);
txt.setText(msg);
PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
wake = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "App:wakeuptag");
wake.acquire(1*60*1000);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|
WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
}
}
}
If anyone could at least leave a link that I can refer to or concepts that would be helpful in this case, that would be great. I've looked into WakeLock and well over 20 questions about this issue. However, I wasn't too sure if they were outdated or not as majority of them are from over 8 years ago.
Upvotes: 0
Views: 860