알람 권한 요청 코드 추가

This commit is contained in:
klaus 2024-07-31 19:59:48 +09:00
parent 063158e9e0
commit ee6090c103
2 changed files with 70 additions and 16 deletions

View File

@ -2,13 +2,20 @@ package kr.co.vividnext.sodalive.mypage.alarm
import android.Manifest
import android.annotation.SuppressLint
import android.app.AlarmManager
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.View
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationManagerCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.gun0912.tedpermission.PermissionListener
import com.gun0912.tedpermission.normal.TedPermission
@ -31,12 +38,74 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
private lateinit var alarmAdapter: AlarmAdapter
private lateinit var loadingDialog: LoadingDialog
private lateinit var requestOverlayPermissionLauncher: ActivityResultLauncher<Intent>
private lateinit var requestExactAlarmPermissionLauncher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
checkAndRequestOverlayPermission()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
checkAndRequestExactAlarmPermission()
}
checkPermissions()
bindData()
}
private fun checkAndRequestOverlayPermission() {
requestOverlayPermissionLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
if (!Settings.canDrawOverlays(this)) {
Toast.makeText(
this,
"알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.",
Toast.LENGTH_SHORT
).show()
finish()
}
}
if (!Settings.canDrawOverlays(this)) {
Toast.makeText(
this,
"알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.",
Toast.LENGTH_SHORT
).show()
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:$packageName")
)
requestOverlayPermissionLauncher.launch(intent)
}
}
@RequiresApi(Build.VERSION_CODES.S)
private fun checkAndRequestExactAlarmPermission() {
requestExactAlarmPermissionLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (!alarmManager.canScheduleExactAlarms()) {
Toast.makeText(
this,
"알람서비스를 이용하시려면 권한을 허용하셔야 합니다.",
Toast.LENGTH_SHORT
).show()
finish()
}
}
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (!alarmManager.canScheduleExactAlarms()) {
val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
requestExactAlarmPermissionLauncher.launch(intent)
}
}
override fun setupView() {
loadingDialog = LoadingDialog(this, layoutInflater)
@ -125,21 +194,9 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
private fun checkPermissions() {
val permissions = mutableListOf<String>()
if (!Settings.canDrawOverlays(this)) {
Toast.makeText(
applicationContext,
"알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.",
Toast.LENGTH_LONG
).show()
permissions.add(Manifest.permission.SYSTEM_ALERT_WINDOW)
}
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S) {
permissions.add(Manifest.permission.SCHEDULE_EXACT_ALARM)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.USE_FULL_SCREEN_INTENT)
permissions.add(Manifest.permission.POST_NOTIFICATIONS)
}
if (permissions.isNotEmpty()) {

View File

@ -40,9 +40,6 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setLayoutParams(binding.ivText, start = 0, end = 0, top = 390, bottom = 0)
// setLayoutParams(binding.ivTextLogo, start = 0, end = 0, top = 0, bottom = 150)
setupRemoteConfig()
binding.surfaceView.holder.addCallback(this)
}