質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

1834閲覧

AndroidStudio アラーム 複数 ダイアログ

murata2019

総合スコア5

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/01/18 07:02

編集2022/01/12 10:55

はじめてのAndroidプログラミング第4版という書籍でAndroidStudioとKotlinを勉強し始めたところです.

現在アラームが完成したところです.
これを応用して日時を複数設定できるアラームを作成したく,挑戦しています.
進行状況は,アクティビティを複数作成し,各アクティビティに1つアラームをセットしています.各アクティビティのアラームは異なる動きをするようになっています.(ダイアログを表示し,OKと次回もという画面を表示し,次回もを押すと1週間後にアラームが再セットされるもの,2週間後にアラームがセットされるもの,1ヶ月後にアラームがセットされるものといった感じです.)
以下のプログラムは複数あるアクティビティのうちの1つです.

実行したいことは以下の通りです.
アラートダイアログのメッセージを各日時によって変える
”月曜日です!”を,ほかのActivityのアラームでセットすると”第1週目の月曜日です!”と表示するようにしたいです.
現在はどのActivityから設定しても同じダイアログが表示される処理しかできません.

Kotlin

1 2 3 4@Suppress("UNREACHABLE_CODE", "DEPRECATION", "CAST_NEVER_SUCCEEDS", "PARAMETER_NAME_CHANGED_ON_OVERRIDE") 5class alarmActivity : AppCompatActivity(),TimeAlertDialog.Listener 6 ,DatePickerFragment.onDateSelectedListener 7 ,TimePickerFragment.OnTimeSelectedListener { 8 9 override fun getUp() { 10 finish() 11 } 12 13 14 override fun onSelected(year: Int, month: Int, date: Int) { 15 val c = Calendar.getInstance() 16 c.set(year, month, date) 17 dateText.setText(DateFormat.format("yyyy/MM/dd", c)) 18 } 19 20 @SuppressLint("SetTextI18n") 21 override fun onSelected(hourOfDay: Int, minute: Int) { 22 timeText.setText("%1$02d:%2$02d".format(hourOfDay,minute)) 23 24 } 25 26 override fun onPositiveClick() { 27 finish() 28 } 29 30 31 override fun snooze() { 32 val calendar = Calendar.getInstance() 33 calendar.timeInMillis = System.currentTimeMillis() 34 calendar.add(Calendar.DAY_OF_WEEK,7) 35 setAlarmManager(calendar) 36 finish() 37 } 38 39 40 override fun onCreate(savedInstanceState: Bundle?) { 41 super.onCreate(savedInstanceState) 42 43 if (intent?.getBooleanExtra("onReceive", false) == true) { 44 when { 45 Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1 -> { 46 setShowWhenLocked(true) 47 setTurnScreenOn(true) 48 val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager 49 keyguardManager.requestDismissKeyguard(this, null) 50 } 51 Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> { 52 window.addFlags( 53 FLAG_TURN_SCREEN_ON or FLAG_SHOW_WHEN_LOCKED 54 ) 55 val keyguardManager = 56 getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager 57 keyguardManager.requestDismissKeyguard(this, null) 58 } 59 else -> window.addFlags( 60 FLAG_TURN_SCREEN_ON or FLAG_SHOW_WHEN_LOCKED or FLAG_DISMISS_KEYGUARD 61 ) 62 } 63 64 val dialog = TimeAlertDialog() 65 dialog.show(supportFragmentManager, "alert_dialog") 66 } 67 68 setContentView(R.layout.activity_alarm) 69 70 setalarm.setOnClickListener { 71 val date = "${dateText.text} ${timeText.text}".toDate() 72 when { 73 date != null -> { 74 val calendar = Calendar.getInstance() 75 calendar.time = date 76 setAlarmManager(calendar) 77 Toast.makeText( 78 this, "アラームをセットしました", 79 Toast.LENGTH_SHORT 80 ).show() 81 } 82 else -> { 83 Toast.makeText( 84 this, "日付の形式が正しくありません", 85 Toast.LENGTH_SHORT 86 ).show() 87 } 88 } 89 } 90 91 cancelalarm.setOnClickListener { 92 cancelAlarmManager() 93 } 94 95 dateText.setOnClickListener { 96 val dialog = DatePickerFragment() 97 dialog.show(supportFragmentManager, "date_dialog") 98 } 99 timeText.setOnClickListener { 100 val dialog = TimePickerFragment() 101 dialog.show(supportFragmentManager, "time_dialog") 102 } 103 104 } 105 106 @SuppressLint("ObsoleteSdkInt") 107 private fun setAlarmManager(calendar: Calendar){ 108 val am = getSystemService(Context.ALARM_SERVICE) as AlarmManager 109 val intent = Intent(this,AlarmBroadcastReceiver::class.java) 110 val pending = PendingIntent.getBroadcast(this,0,intent,0) 111 112 113 114 when{ 115 Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> { 116 val info = AlarmManager.AlarmClockInfo(calendar.timeInMillis, null) 117 am.setAlarmClock(info,pending) 118 } 119 Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ->{ 120 am.setExact(AlarmManager.RTC_WAKEUP,calendar.timeInMillis,pending) 121 }else ->{ 122 am.set(AlarmManager.RTC_WAKEUP,calendar.timeInMillis,pending) 123 } 124 } 125 } 126 private fun cancelAlarmManager(){ 127 val am = getSystemService(Context.ALARM_SERVICE) as AlarmManager 128 val intent = Intent(this,AlarmBroadcastReceiver::class.java) 129 val pending = PendingIntent.getBroadcast(this,0,intent,0) 130 am.cancel(pending) 131 } 132 133 134 private fun String.toDate(pattern:String = "yyyy/MM/dd HH:mm"):Date?{ 135 return try { 136 SimpleDateFormat(pattern).parse(this) 137 }catch (e:IllegalArgumentException){ 138 return null 139 }catch (e:ParseException){ 140 return null 141 } 142 } 143}

Kotlin

1 2 3@Suppress("UNUSED_ANONYMOUS_PARAMETER") 4class TimeAlertDialog : DialogFragment(){ 5 6 interface Listener{ 7 fun getUp() 8 fun snooze() 9 fun onPositiveClick() 10 11 fun onSelected(year: Int, month: Int, date: Int) 12 13 } 14 private var listener:Listener? = null 15 16 override fun onAttach(context: Context) { 17 super.onAttach(context) 18 when (context){ 19 is Listener -> listener = context 20 } 21 } 22 23 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 24 val builder = AlertDialog.Builder(requireActivity()) 25 builder.setMessage("月曜日です!") 26 27 builder.setPositiveButton("OK"){dialog, which -> 28 listener?.getUp() 29 } 30 builder.setNegativeButton("次回も"){dialog,which -> 31 listener?.snooze() 32 } 33 return builder.create() 34 } 35} 36 37class DatePickerFragment : DialogFragment(),DatePickerDialog.OnDateSetListener{ 38 interface onDateSelectedListener{ 39 fun onSelected(year: Int,month:Int,date:Int) 40 } 41 private var listener: onDateSelectedListener? = null 42 43 override fun onAttach(context: Context) { 44 super.onAttach(context) 45 when(context){ 46 is onDateSelectedListener -> listener=context 47 } 48 } 49 50 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 51 //return super.onCreateDialog(savedInstanceState) 52 val c = Calendar.getInstance() 53 val year = c.get(Calendar.YEAR) 54 val month = c.get(Calendar.MONTH) 55 val date = c.get(Calendar.DAY_OF_MONTH) 56 return DatePickerDialog(requireActivity(),this,year,month,date) 57 58 } 59 override fun onDateSet(view:DatePicker?,year: Int,month: Int,dayOfMonth: Int){ 60 listener?.onSelected(year,month,dayOfMonth) 61 } 62} 63 64class TimePickerFragment : DialogFragment(),TimePickerDialog.OnTimeSetListener{ 65 interface OnTimeSelectedListener{ 66 fun onSelected(hourOfDay:Int,minute:Int) 67 } 68 69 private var listener : OnTimeSelectedListener? = null 70 71 override fun onAttach(context: Context) { 72 super.onAttach(context) 73 when(context){ 74 is OnTimeSelectedListener -> listener = context 75 } 76 } 77 78 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 79 val c = Calendar.getInstance() 80 val hour = c.get(Calendar.HOUR_OF_DAY) 81 val minute = c.get(Calendar.MINUTE) 82 return TimePickerDialog(context,this,hour,minute,true) 83 } 84 85 override fun onTimeSet(View:TimePicker?,hourOfDay: Int,minute: Int) { 86 //TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 87 listener?.onSelected(hourOfDay, minute) 88 } 89}

Kotlin

1package com.example.gomidashihome1 2 3import android.content.BroadcastReceiver 4import android.content.Context 5import android.content.Intent 6 7class AlarmBroadcastReceiver : BroadcastReceiver() { 8 9 override fun onReceive(context: Context, intent: Intent) { 10 // This method is called when the BroadcastReceiver is receiving an Intent broadcast. 11 //TODO("AlarmBroadcastReceiver.onReceive() is not implemented") 12 val mainIntent = Intent(context,alarmActivity::class.java) 13 .putExtra("onReceive",true) 14 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 15 context.startActivity(mainIntent) 16 } 17}

Android初心者のため至らぬところばかりですが,何か教えて頂けると幸いです.

開発環境は
Android Studio3.4.1
Windows10
です.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問