public
class
AlarmActivity
extends
AppCompatActivity {
private
ActivityAlarmBinding binding;
private
ActivityResultLauncher<Void> overlayPermissionLauncher;
@Override
protected
void
onCreate(
@Nullable
Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
binding = ActivityAlarmBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
viewDidLoad();
}
private
void
viewDidLoad() {
overlayPermissionLauncher
= registerForActivityResult(
new
GetOverlayWindowPermission(getApplicationContext()), result -> {
if
(!result) {
showOverlayPermissionRequiredMessage();
}
});
binding.setAlarmButton.setOnClickListener(v -> {
setAlarm();
});
if
(drawOverlaysRequiredButNotGranted()) {
overlayPermissionLauncher.launch(
null
);
}
}
private
void
setAlarm() {
if
(drawOverlaysRequiredButNotGranted()) {
return
;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(
new
Date(System.currentTimeMillis() + (
10
* 1000L)));
Intent intent =
new
Intent(getApplicationContext(), AlarmReceiver.
class
);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
getApplicationContext(),
0
,
intent,
PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT
);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
pendingIntent
);
DateFormat format =
new
SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"
, Locale.getDefault());
Toast.makeText(
this
,
"Alarm : "
+ format.format(calendar.getTime()), Toast.LENGTH_LONG)
.show();
runOnUiThread(() -> {
});
}
private
boolean
drawOverlaysRequiredButNotGranted() {
return
drawOverlaysRequired() && !canDrawOverlays();
}
private
boolean
drawOverlaysRequired() {
return
Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
}
private
boolean
canDrawOverlays() {
return
Settings.canDrawOverlays(getApplicationContext());
}
private
void
showOverlayPermissionRequiredMessage() {
Toast.makeText(
this
,
"Overlay 권한은 노티피케이션을 자동으로 처리하는데 꼭 필요한 권한입니다."
, Toast.LENGTH_LONG)
.show();
}
}