前提・実現したいこと
はじめてのAndroidプログラミング 第4版
Chapter11:My Alarm Clockで下記エラー解決できず困っています。
発生している問題・エラーメッセージ
com/example/kenta/myalarmclock/MainActivity.kt Unresolved reference: OnDateSelectedListener 'onSelected' overrides nothing Unresolved reference: format 'onPositiveClick' overrides nothing Unresolved reference: requestDimissKeyguard Unresolved reference: FLAG_TURN_SCREEN_ON Unresolved reference: FLAG_SHOW_WHEN_LOCKED Unresolved reference: FLAG_TURN_SCREEN_ON Unresolved reference: FLAG_SHOW_WHEN_LOCKED Unresolved reference: FLAG_DISMISS_KEYGUARD > Task :app:buildInfoGeneratorDebug
該当のソースコード
Kotlin
package com.example.kenta.myalarmclock import android.app.AlarmManager import android.app.KeyguardManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.icu.text.SimpleDateFormat import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.provider.ContactsContract import android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* import java.lang.IllegalArgumentException import java.text.DateFormat import java.text.ParseException import java.util.* import java.util.regex.Pattern class MainActivity : AppCompatActivity(), TimeAlertDialog.Listener , DatePickerFragment.OnDateSelectedListener , TimePickerFragment.OnTimeSelectedListener { override fun getUp() { finish() } override fun onSelected(year: Int, month: Int, date: Int) { val c = Calendar.getInstance() c.set(year, month, date) dateText.text = DateFormat.format("yyyy/MM/dd", c) } override fun onSelected(hourOfDay: Int, minute: Int) { timeText.text = "%1$02d:%2$02d".format(hourOfDay, minute) } override fun onPositiveClick() { finish() } override fun snooze() { val calendar = Calendar.getInstance() calendar.timeInMillis = System.currentTimeMillis() calendar.add(Calendar.MINUTE, 5) setAlarmManager(calendar) finish() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (intent?.getBooleanExtra("onReceive", false) == true) { when { Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1 -> { setShowWhenLocked(true) setTurnScreenOn(true) val keyguardManager = getSystemService(KEYGUARD_SERVICE) as KeyguardManager keyguardManager.requestDimissKeyguard(this, null) } Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> { window.addFlags( FLAG_TURN_SCREEN_ON or FLAG_SHOW_WHEN_LOCKED ) val keyguardManager = getSystemService(KEYGUARD_SERVICE) as KeyguardManager keyguardManager.requestDismissKeyguard(this, null) } else -> window.addFlags( FLAG_TURN_SCREEN_ON or FLAG_SHOW_WHEN_LOCKED or FLAG_DISMISS_KEYGUARD ) } val dialog = TimeAlertDialog() dialog.show(supportFragmentManager, "alert_dialog") } setContentView(R.layout.activity_main) setAlarm.setOnClickListener { val date = "${dateText.text} ${timeText.text}".toDate() when { date != null -> { val calendar = Calendar.getInstance() calendar.time = date setAlarmManager(calendar) Toast.makeText( this, "アラームをセットしました", Toast.LENGTH_SHORT ).show() } else -> { Toast.makeText( this, "日付の形式が正しくありません", Toast.LENGTH_SHORT ).show() } } cancelAlarm.setOnClickListener { cancelAlarmManager() } dateText.setOnClickListener { val dialog = DatePickerFragment() dialog.show(supportFragmentManager, "date_dialog") } timeText.setOnClickListener { val dialog = TimePickerFragment() dialog.show(supportFragmentManager, "time_dialog") } } } private fun setAlarmManager(calendar: Calendar) { val am = getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent = Intent(this, AlarmBroadcastReceiver::class.java) val pending = PendingIntent.getBroadcast(this, 0, intent, 0) when { Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> { val info = AlarmManager.AlarmClockInfo( calendar.timeInMillis, null ) am.setAlarmClock(info, pending) } Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT -> { am.setExact( AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pending ) } else -> { am.set( AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pending ) } } } private fun cancelAlarmManager() { val am = getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent = Intent(this, AlarmBroadcastReceiver::class.java) val pending = PendingIntent.getBroadcast(this, 0, intent, 0) am.cancel(pending) } private fun String.toDate(pattern: String = "yyyy/MM/dd"): Date? { return try { SimpleDateFormat(pattern).parse(this) } catch (e: IllegalArgumentException) { return null } catch (e: ParseException) { return null } } }
試したこと
ネットで複数Unresolved referenceの解決方法について調べましたが解決できずでした。
初心者のため、深く理解できていない可能性は高いです。
補足情報(FW/ツールのバージョンなど)
Mac(macOS Mojave:10.14.4)
AndroidStudio3.4を利用しております。
他に必要な情報などあればお教えいただければ調べて記載いたします。
まだ回答がついていません
会員登録して回答してみよう