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

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

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

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

Android Studio

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

Kotlin

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

Q&A

0回答

2559閲覧

【Kotlin】Android Studio アラームの曜日指定

murata2019

総合スコア5

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2020/01/15 04:13

はじめてのAndroidプログラミング第4版という書籍で勉強しています.
現在,年月日と時刻を指定するアラームが完成しています.
このアラームを曜日指定できるものに改良したいのですが上手くできません.
良い案を教えて頂きたいです.

Kotlin

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

【開発環境】
Android Studio3.4.1
Windows10

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

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

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

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

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

jimbe

2020/01/15 07:09

> 上手くできません 何がどう上手くできないのでしょう. 具体的にコードの個所や発生している現象等をご提示ください.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問