実現したいこと
- 時刻指定の通知機能を動作するようにする
前提
kotlinでアプリを作っています。
TimePickerで指定した時刻に通知を飛ばす機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
java.lang.NumberFormatException: For input string: ""
AlarmActivty.kt
kotlin
1package com.example.ohurocchi 2 3import android.app.AlarmManager 4import android.app.PendingIntent 5import android.app.TimePickerDialog 6import android.content.Intent 7import android.icu.text.SimpleDateFormat 8import android.icu.util.Calendar 9import android.media.MediaPlayer 10import android.os.Bundle 11import android.util.Log 12import android.widget.* 13import androidx.appcompat.app.AppCompatActivity 14import com.google.firebase.firestore.ktx.firestore 15import com.google.firebase.ktx.Firebase 16 17 18class AlarmActivity : AppCompatActivity(){ 19 20 lateinit var text_et: EditText 21 22 private var am: AlarmManager? = null 23 private var pending: PendingIntent? = null 24 private val requestCode = 1 25 26 override fun onCreate(savedInstanceState: Bundle?) { 27 super.onCreate(savedInstanceState) 28 setContentView(R.layout.activity_alarm) 29 30 text_et = findViewById<EditText>(R.id.text_et) //EditText(入力エリア) 31 32 //EditTextのクリックイベントを設定 33 text_et.setOnClickListener { 34 showTimePickerDialog() 35 } 36 var number : Int = text_et.text.toString().toInt() 37 //アラームを設定するボタン 38 val buttonAlarm: Button = findViewById(R.id.buttonAlarm) 39 buttonAlarm.setOnClickListener { 40 val calendar = java.util.Calendar.getInstance() 41 calendar.timeInMillis = System.currentTimeMillis() 42 // 10sec 43 calendar.add(java.util.Calendar.SECOND, number) 44 val intent = Intent(applicationContext, AlarmNotification::class.java) 45 intent.putExtra("RequestCode", requestCode) 46 pending = PendingIntent.getBroadcast( 47 applicationContext, requestCode, intent, 48 PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE 49 ) 50 51 // アラームをセットする 52 am = getSystemService(ALARM_SERVICE) as AlarmManager 53 if (am != null) { 54 am!!.setExact( 55 AlarmManager.RTC_WAKEUP, 56 calendar.timeInMillis, pending 57 ) 58 59 // トーストで設定されたことをを表示 60 Toast.makeText( 61 applicationContext, 62 "入浴する時間を決定しました!", Toast.LENGTH_SHORT 63 ).show() 64 Log.d("debug", "start") 65 } 66 } 67 } 68 /* 時間ダーダイアログを開くためのメソッド */ 69 fun showTimePickerDialog() { 70 val calendar: Calendar = Calendar.getInstance() 71 72 val cal = Calendar.getInstance() 73 val timeSetListener = TimePickerDialog.OnTimeSetListener { timePicker, hour, minute -> 74 cal.set(Calendar.HOUR_OF_DAY, hour) 75 cal.set(Calendar.MINUTE, minute) 76 //EditTextに選択された時間を設定 77 text_et.setText(SimpleDateFormat("HH:mm").format(cal.time)) 78 } 79 80 //タイムピッカーダイアログを生成および設定 81 TimePickerDialog(this, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show() 82 } 83
AlarmNotification.kt
kotlin
1package com.example.ohurocchi 2 3import android.annotation.SuppressLint 4import android.app.NotificationChannel 5import android.app.NotificationManager 6import android.app.PendingIntent 7import android.content.BroadcastReceiver 8import android.content.Context 9import android.content.Intent 10import androidx.core.app.NotificationCompat 11import androidx.core.app.NotificationManagerCompat 12import java.text.SimpleDateFormat 13import java.util.* 14 15class AlarmNotification : BroadcastReceiver() { 16 // データを受信した 17 @SuppressLint("MissingPermission") 18 override fun onReceive(context: Context, intent: Intent) { 19 val requestCode = intent.getIntExtra("RequestCode", 0) 20 val pendingIntent = PendingIntent.getActivity( 21 context, requestCode, intent, 22 PendingIntent.FLAG_UPDATE_CURRENT or 23 PendingIntent.FLAG_IMMUTABLE 24 ) 25 val channelId = "default" 26 // app name 27 val title = context.getString(R.string.app_name) 28 val currentTime = System.currentTimeMillis() 29 val dataFormat = SimpleDateFormat("HH:mm:ss", Locale.JAPAN) 30 val cTime = dataFormat.format(currentTime) 31 32 // メッセージ 33 val message = "お風呂の時間です! $cTime" 34 35 36 // Notification Channel 設定 37 val channel = NotificationChannel( 38 channelId, title, 39 NotificationManager.IMPORTANCE_DEFAULT 40 ) 41 channel.description = message 42 val notificationManager = 43 // (NotificationManager)context.getSystemService(NotificationManager.class); 44 context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager 45 notificationManager.createNotificationChannel(channel) 46 val builder = NotificationCompat.Builder(context, channelId) 47 .setSmallIcon(R.drawable.ohurocchi_logo) 48 .setContentTitle("おふろっち") 49 .setContentText(message) 50 .setPriority(NotificationCompat.PRIORITY_DEFAULT) 51 .setContentIntent(pendingIntent) 52 .setAutoCancel(true) 53 val notificationManagerCompat = NotificationManagerCompat.from(context) 54 55 56 57 // 通知 58 notificationManagerCompat.notify(R.string.app_name, builder.build()) 59 } 60} 61
試したこと
Edittextのtext_etに値を入れてみたり、Int型に変換など試してみましたが指定された時刻ではなくあらかじめ入っている値で通知が来る状態です。(10なら10秒後)
補足情報(FW/ツールのバージョンなど)
以下参考にしたサイトです。
回答1件
あなたの回答
tips
プレビュー