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

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

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

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

Android Studio

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

Kotlin

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

解決済

AlarmManagerで設定時間に音(SoundPool)が鳴らない

kakashi55
kakashi55

総合スコア25

Android

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

Android Studio

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

Kotlin

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

1回答

0評価

0クリップ

419閲覧

投稿2021/09/29 13:42

android studioでkotlinにてアラーム機能を実装しようとしております。

〇やりたいこと
設定時間に通知(Notification)と音(SoundPool)を出したい
以下コードは5s後に通知されるように書いています

〇困っていること
指定時間にSoundPoolの処理を通過しているものの音が鳴らない

MainActiviy

class MainActivity : FragmentActivity(), TimePickerDialog.OnTimeSetListener { private lateinit var binding: ActivityMainBinding private lateinit var soundManager: SoundManager override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) soundManager = SoundManager(this) binding.btnTest.setOnClickListener { alarmSet() } } private fun alarmSet() { val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager val calendar = Calendar.getInstance() var year = calendar.get(Calendar.YEAR) var month = calendar.get(Calendar.MONTH) var day = calendar.get(Calendar.DAY_OF_MONTH) val intent = Intent(this, MyReceiver::class.java) val pendingIntent = PendingIntent.getBroadcast( this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT ) calendar.add(Calendar.SECOND, 5) alarmManager.setExact( AlarmManager.RTC_WAKEUP, //calendar.getTimeInMillis(), calendar.timeInMillis, pendingIntent ) } fun playOneReady() { soundManager.playOne() }

MyReceiver

class MyReceiver: BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if (context != null) { MyNotification.sendNotification(context) } } }

MyNotification

class MyNotification(context: Context) { companion object { private const val NOTIFICATION_CHANNEL_ID = "com.example.sample_alarm_manager_channel_id" private const val NOTIFICATION_CHANNEL_NAME = "Time for !!" private const val NOTIFICATION_CHANNEL_DESCRIPTION = "Go To The" private const val NOTIFICATION_TITLE = "sample alarm manager" private const val NOTIFICATION_MESSAGE = "test message." fun sendNotification(context: Context) { Log.d("debug", "MyNotification sendNotification") val channelId = Companion.NOTIFICATION_CHANNEL_ID val channelName = Companion.NOTIFICATION_CHANNEL_NAME val channelDescription = Companion.NOTIFICATION_CHANNEL_DESCRIPTION //Android 8.0 以上ではアプリの通知チャンネルを登録することが必要。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val importance = NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel(channelId, channelName, importance).apply { description = channelDescription } val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager manager.createNotificationChannel(channel) } //通知をシステムに登録しています。 val builder = NotificationCompat.Builder(context, channelId).apply { setSmallIcon(R.drawable.ic_baseline_info_24) setContentTitle(Companion.NOTIFICATION_TITLE) setContentText(Companion.NOTIFICATION_MESSAGE) priority = NotificationCompat.PRIORITY_DEFAULT } val id = 0 NotificationManagerCompat.from(context).notify(id, builder.build()) val mainActivity = MainActivity() mainActivity.playOneReady() } } }

soundManager

class SoundManager(context: Context) { private var soundPool: SoundPool private var soundOne = 0 private var streamId2 = 0 init { //soundPool設定 val audioAttributes = AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_GAME) .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) .build() soundPool = SoundPool.Builder() .setAudioAttributes(audioAttributes) .setMaxStreams(1) .build() soundOne = soundPool.load(context, R.raw.bivlla, 1) Log.d("debug", "SoundManager init") } fun playOne() { cancelOne() streamId2 = soundPool.play(soundOne, 1.0f, 1.0f, 0, -1, 1.0f) Log.d("debug", "sound ringing") } fun cancelOne() { if(streamId2 != 0) { //fun playOneを通るとここを通る(音が鳴るとstreamId2= 1 が入る) soundPool.stop(streamId2) streamId2 = 0 } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Android

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

Android Studio

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

Kotlin

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。