Я делаю приложение для будильника, и я нахожусь на этапе, когда мне нужно отобразить экран будильника (AlarmActivity), поскольку вызывается onReceive from BroadcastReceiver. Вот то, чего мне нужно достичь, когда придет время бить тревогу.
- Когда экран выключен, включите устройство и отобразите экран будильника, когда придет время.
- Когда экран включен, но приложение выключено, отобразите экран будильника.
- Когда экран включен и пользователь находится в приложении будильника, отобразите экран будильника.
Я пробовал этот код, но он не работает. Начать активность, даже если экран выключен
onCreate моей основной деятельности..
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);
Он устанавливает будильник на определенное время.
Это мой класс AlarmReceiver.
@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);
Вот мой AlarmActivity.java, экран, который я хочу отображать при вызове будильника.
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);
}
}
}
Если бы кто-нибудь мог хотя бы оставить ссылку, на которую я могу сослаться, или концепции, которые были бы полезны в этом случае, это было бы здорово. Я изучил WakeLock и получил более 20 вопросов по этой проблеме. Однако я не был слишком уверен, устарели они или нет, поскольку большинство из них были созданы более 8 лет назад.
Notification
с полноэкраннымIntent
. - person CommonsWare   schedule 25.01.2021Notification
. УведомлениеPendingIntent
относится кPendingIntent
, вызванному взаимодействием пользователя сNotification
. - person CommonsWare   schedule 25.01.2021Notification
с полноэкраннымIntent
. Когда экран моего устройства включен, я получаю всплывающее окно о будильнике. Когда экран моего устройства выключен, я получаю информацию об активности, обозначенной полноэкраннымIntent
. - person CommonsWare   schedule 25.01.2021