안녕하세요 제가 공부용으로 프로그램 코딩 중에 AlarmManager를 사용하면서
broadcast사용에 문제가 있어서 글을 올립니다.
일단, AlarmManager를 사용하기 위해서 BroadCastReceiver를 등록해야하는데,
문제는 제가 만들려는 프로그램에선 BroadCasterReceiver에서 다른 클래스에 있는
함수와 데이터를 사용해야 한다는 점입니다.
이를 위해 Inner클래스로 Receiver를 선언했더니 Inner클래스는 Manifast에
Receiver로 등록이 되지 않는다는겁니다.
그래서 다음으로 LocalBroadCastReceiver를 사용해서 Receiver를 등록해보려
했지만 AlarmManager에서는 이 방법은 사용할 수 없다고 검색해보고 알았습니다.
혹시 이 문제를 해결할 수 있는 방법이 있을까요?
아, 그리고 registerReceiver도 사용해봤는데, 이 방법도 되지 않았습니다.
테스트용으로 사용헀던 코드를 같이 올리겠습니다.
class MainActivity : AppCompatActivity() {
lateinit var context: Context
lateinit var alarmManager: AlarmManager
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
context = this
alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val view = binding.root
setContentView(view)
val br = Receiver()
val intentFilter = IntentFilter("range")
registerReceiver(br, intentFilter)
binding.btnCreate.setOnClickListener {
val intent = Intent(context, Receiver::class.java).apply {
action = "range"
}
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
Log.d("MainActivity", "Create: " + Date().toString())
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent)
}
}
inner class Receiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("알람", "테스트")
Log.d("MainActivity", "Create: " + Date().toString())
}
}
}
마지막으로, inner클래스로 사용하지 않고 그냥 Manifast에 Recevier를 등록했을 때는
정상적으로 작동했었습니다.