diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 8aaa2bb..71b0d42 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -10,11 +10,6 @@
@style/Theme.Assignment02
-
-
- @style/Theme.Assignment02
-
-
portrait
@@ -28,14 +23,25 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
+
+
+
@@ -85,7 +91,6 @@
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.cidr.known.project.marker": "true",
- "android.gradle.sync.needed": "true",
"cf.first.check.clang-format": "false",
"cidr.known.project.marker": "true",
"last_directory_selection": "C:/Users/Public/assignment02/app/src/main/java",
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bd2b54d..8699b45 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,7 @@
+
+ NotificationCompat.Builder(it1, "assignment-7")
+ .setSmallIcon(android.R.drawable.ic_notification_overlay)
+ .setContentTitle("랜덤 숫자 (0 ~ " + currentNumber + ")")
+ .setContentText("새로운 랜덤 숫자가 생성되었습니다.")
+ .setPriority(NotificationCompat.PRIORITY_DEFAULT)
+ .setContentIntent(pendingIntent) // 클릭 시 실행
+ .setAutoCancel(true) // 클릭 후 알림 자동 제거
+ .build()
+ }!!
+
+ showNotification()
}
return view
}
+ private fun createNotificationChannel() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ val name = "Assignment Notification"
+ val descriptionText = "Channel for Assignment notifications"
+ val importance = NotificationManager.IMPORTANCE_DEFAULT
+ val channel = NotificationChannel("assignment-7", name, importance).apply {
+ description = descriptionText
+ }
+ // NotificationManager에 채널 등록
+ val notificationManager: NotificationManager =
+ requireContext().getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+ notificationManager.createNotificationChannel(channel)
+ }
+ }
+
+ private val requestPermissionLauncher = registerForActivityResult(
+ ActivityResultContracts.RequestPermission()
+ ) { isGranted: Boolean ->
+ if (isGranted) {
+ // 권한이 허용된 경우 알림 표시
+ showNotification()
+ } else {
+ // 권한이 거부된 경우 처리
+ println("Notification permission denied")
+ }
+ }
+
+ // 권한등을 채크하고 Notification을 보낸다.
+ private fun showNotification() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ // Android 13 이상에서는 POST_NOTIFICATIONS 권한 확인
+ if (ActivityCompat.checkSelfPermission(
+ requireContext(),
+ Manifest.permission.POST_NOTIFICATIONS
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
+ return
+ }
+ }
+
+ // 권한이 있거나 Android 12 이하인 경우 알림 표시
+ NotificationManagerCompat.from(requireContext()).notify(1, notification)
+ }
+
private fun showAlertDialog() {
// Fragment에서는 requireContext()를 사용하여 컨텍스트를 가져옴
val builder = AlertDialog.Builder(requireContext())
@@ -84,4 +161,4 @@ class CountFragment : Fragment() {
return fragment
}
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/assignment02/MainActivity.kt b/app/src/main/java/com/example/assignment02/MainActivity.kt
index a990021..67ee012 100644
--- a/app/src/main/java/com/example/assignment02/MainActivity.kt
+++ b/app/src/main/java/com/example/assignment02/MainActivity.kt
@@ -2,6 +2,7 @@ package com.example.assignment02
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import androidx.fragment.app.Fragment
class MainActivity : AppCompatActivity() {
@@ -9,10 +10,20 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- if (savedInstanceState == null) {
- supportFragmentManager.beginTransaction()
- .replace(R.id.fragment_container, CountFragment.newInstance(0))
- .commit()
+ val isFromNotification = intent?.getBooleanExtra("Notification", false) ?: false
+ val data = intent?.getIntExtra("number", 0) ?: 0
+
+ val fragment: Fragment = if (isFromNotification) {
+ // Notification을 통해 실행된 경우 FragmentB 로드 및 데이터 전달
+ RandomFragment.newInstance(data)
+ } else {
+ // 기본적으로 FragmentA 로드
+ CountFragment.newInstance(0)
}
+
+ // 선택된 Fragment를 동적으로 할당
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.fragment_container, fragment)
+ .commit()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/assignment02/RandomFragment.kt b/app/src/main/java/com/example/assignment02/RandomFragment.kt
index 4aeeb4b..c4eaf7e 100644
--- a/app/src/main/java/com/example/assignment02/RandomFragment.kt
+++ b/app/src/main/java/com/example/assignment02/RandomFragment.kt
@@ -39,7 +39,9 @@ class RandomFragment : Fragment() {
currentNumber = it.getInt("randomNumber", 0)
}
- currentNumber = (0..currentNumber-1).random()
+ if (currentNumber>=1) {
+ currentNumber = (0..currentNumber - 1).random()
+ }
number_number.text = currentNumber.toString()
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
@@ -51,4 +53,4 @@ class RandomFragment : Fragment() {
.commit()
}
}
-}
+}
\ No newline at end of file