알람 권한 요청 코드 추가

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.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.AlarmManager
import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import android.view.View import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationManagerCompat
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.gun0912.tedpermission.PermissionListener import com.gun0912.tedpermission.PermissionListener
import com.gun0912.tedpermission.normal.TedPermission import com.gun0912.tedpermission.normal.TedPermission
@ -31,12 +38,74 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
private lateinit var alarmAdapter: AlarmAdapter private lateinit var alarmAdapter: AlarmAdapter
private lateinit var loadingDialog: LoadingDialog private lateinit var loadingDialog: LoadingDialog
private lateinit var requestOverlayPermissionLauncher: ActivityResultLauncher<Intent>
private lateinit var requestExactAlarmPermissionLauncher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
checkAndRequestOverlayPermission()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
checkAndRequestExactAlarmPermission()
}
checkPermissions() checkPermissions()
bindData() 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() { override fun setupView() {
loadingDialog = LoadingDialog(this, layoutInflater) loadingDialog = LoadingDialog(this, layoutInflater)
@ -125,21 +194,9 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
private fun checkPermissions() { private fun checkPermissions() {
val permissions = mutableListOf<String>() 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) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.USE_FULL_SCREEN_INTENT) permissions.add(Manifest.permission.USE_FULL_SCREEN_INTENT)
permissions.add(Manifest.permission.POST_NOTIFICATIONS)
} }
if (permissions.isNotEmpty()) { if (permissions.isNotEmpty()) {

View File

@ -40,9 +40,6 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) 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() setupRemoteConfig()
binding.surfaceView.holder.addCallback(this) binding.surfaceView.holder.addCallback(this)
} }