🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android

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

Android Studio

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

Kotlin

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

Q&A

解決済

2回答

3925閲覧

音の鳴らし方[Kotlin]

nana_7188

総合スコア2

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2020/12/04 09:52

編集2020/12/14 12:18

#やりたいこと
Kotlinにてボタンをスタートボタンをタップすると音が鳴り、
ストップボタンをタップすると音が止まるアプリを練習の為に作りたいです。

音を鳴らすためにMediaPlayerを使うことはわかりましたが、
MediaPlayerのコードをどこのactivityに記述すればいいのかわかりません。
試しにMainactivity.ktに入力するとパソコン上で音声を開き再生はしますが
アプリは開くことができませんでした。

コードを記述するactivityまたは
こちらのコード以外に何かいい方法、いいサイト等ありましたらご教授頂ければ幸いです。

#Code

kotlin

1package com.example.oto 2 3import android.content.Context 4import android.media.MediaPlayer 5import androidx.appcompat.app.AppCompatActivity 6import android.os.Bundle 7import android.widget.Button 8import kotlinx.android.synthetic.main.activity_main.* 9 10 11class MainActivity : AppCompatActivity() { 12 13 private val musicManager: MusicManager = MusicManager(this@MainActivity) 14 15 override fun onCreate(savedInstanceState: Bundle?) { 16 super.onCreate(savedInstanceState) 17 setContentView(R.layout.activity_main) 18 19 // Button for start music 20 val buttonStart: Button = findViewById(R.id.start_music) 21 22 // Resister listener 23 buttonStart.setOnClickListener { 24 musicManager.startMusic() 25 } 26 27 // Button for stop music 28 val buttonStop: Button = findViewById(R.id.stop_music) 29 30 // Resister listener 31 buttonStop.setOnClickListener { 32 musicManager.stopMusic() 33 } 34 } 35} 36 37 38class MusicManager(context: Context) { 39 40 private lateinit var mediaPlayer: MediaPlayer 41 private val myContext: Context = context 42 43 fun startMusic() { 44 mediaPlayer = MediaPlayer.create(myContext, R.raw.test) 45 mediaPlayer.isLooping = true 46 mediaPlayer.start() 47 } 48 49 fun stopMusic() { 50 mediaPlayer.stop() 51 mediaPlayer.reset() 52 mediaPlayer.release() 53 } 54} 55

#補足情報
androidstudio4.1

#コメントに対する追記となります

2020-12-14 19:51:11.901 19828-19828/com.example.oto E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.oto, PID: 19828 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.oto/com.example.oto.MainActivity}: java.lang.NullPointerException: findViewById(R.id.start_music) must not be null at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: java.lang.NullPointerException: findViewById(R.id.start_music) must not be null at com.example.oto.MainActivity.onCreate(MainActivity.kt:19) at android.app.Activity.performCreate(Activity.java:7136) at android.app.Activity.performCreate(Activity.java:7127) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:193)  at android.app.ActivityThread.main(ActivityThread.java:6669)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

#写真
altエラーログイメージ説明

♯コメントに対する追記 activity_main

kotlin

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <Button 10 android:id="@+id/button" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="@string/start" 14 tools:layout_editor_absoluteX="143dp" 15 tools:layout_editor_absoluteY="119dp" /> 16 17 <Button 18 android:id="@+id/button2" 19 android:layout_width="wrap_content" 20 android:layout_height="wrap_content" 21 android:text="@string/stop" 22 tools:layout_editor_absoluteX="138dp" 23 tools:layout_editor_absoluteY="363dp" /> 24</androidx.constraintlayout.widget.ConstraintLayout>

♯コメントに対する追記 何度も申し訳ございません。

2020-12-14 21:11:28.702 21871-21896/com.example.oto E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1 2020-12-14 21:11:28.928 21871-21896/com.example.oto D/EGL_emulation: eglMakeCurrent: 0xe7e90700: ver 2 0 (tinfo 0xefb625c0) 2020-12-14 21:11:37.371 21871-21871/com.example.oto D/AndroidRuntime: Shutting down VM 2020-12-14 21:11:37.373 21871-21871/com.example.oto E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.oto, PID: 21871 kotlin.UninitializedPropertyAccessException: lateinit property mediaPlayer has not been initialized at com.example.oto.MainActivity.stopMusic(MainActivity.kt:42) at com.example.oto.MainActivity$onCreate$2.onClick(MainActivity.kt:31) at android.view.View.performClick(View.java:6597) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) at android.view.View.performClickInternal(View.java:6574) at android.view.View.access$3100(View.java:778) at android.view.View$PerformClick.run(View.java:25885) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 2020-12-14 21:11:37.395 21871-21871/com.example.oto I/Process: Sending signal. PID: 21871 SIG: 9

#![エミュレータ]
ログ

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

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

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

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

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

guest

回答2

0

何度も申し訳ございません。
activity_mainを書き換えエミュレータを起動するとアプリを開くことができました。
しかし、STOPボタンだけが表示されており、STOPボタンをタップするとアプリが落ちてしまいます。
ログ及びアプリの写真を質問に追記いたしました。

何卒よろしくお願いいたします。

投稿2020/12/14 12:20

nana_7188

総合スコア2

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

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

0

ベストアンサー

現状のコードのままで特に問題なく動きました。現状提示されているコード自体には問題がないと思います。

試しにMainactivity.ktに入力するとパソコン上で音声を開き再生はしますがアプリは開くことができませんでした。

この部分がよくわかりません。

アプリを立ち上げる→ボタンを押す→音が流れる

と言う状態にならないと言うことでしょうか?

クラスで作っているMusicManager自体はどこに書いても問題ありませんのでMainActivity.ktにあっても問題ありません。別にクラスを作らなくても良いです。

class MainActivity : AppCompatActivity() { private lateinit var mediaPlayer: MediaPlayer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Button for start music val buttonStart: Button = findViewById(R.id.start_music) // Resister listener buttonStart.setOnClickListener { startMusic() } // Button for stop music val buttonStop: Button = findViewById(R.id.stop_music) // Resister listener buttonStop.setOnClickListener { stopMusic() } } fun startMusic() { mediaPlayer = MediaPlayer.create(this, R.raw.test) mediaPlayer.isLooping = true mediaPlayer.start() } fun stopMusic() { mediaPlayer.stop() mediaPlayer.reset() mediaPlayer.release() } }

=== コメントに対する追記
アプリが落ちているのであればエラー情報がLogcatに出ていると思いますので、エラーログの情報をお願いいたします。

以下はLogcat Errorの表示場所です。
イメージ説明

=== コメントに対する追記
MainActivity.ktの19行目でエラーが発生しており、findVieewById(R.id.start_music)が見つからなくてエラーが発生しています。
Logcatの青い部分を押すと該当行に飛びます。

activity_main.xmlにstart_musicが無いのかもしれません?
そこの部分が落ちないようになれば起動するかと思います。
エラーの修正方法がわからないようであればactivity_main.xmlの内容を記載していただけますでしょうか。

以上、よろしくお願いいたします。

=== コメントに対する追記
findViewById(R.id.start_music)、これは読み込んでいるレイアウトからIDを拾ってくるのでactivity_main.xmlにstart_musicと言うIDがないとnullで落ちてしまいます。なので

xmlの方にidを合わせるのであれば

// Button for start music val buttonStart: Button = findViewById(R.id.button) // Resister listener buttonStart.setOnClickListener { startMusic() } // Button for stop music val buttonStop: Button = findViewById(R.id.button2) // Resister listener buttonStop.setOnClickListener { stopMusic() }

とするか、もしくはxmlを修正するのであれば

<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/start_music" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/start" tools:layout_editor_absoluteX="143dp" tools:layout_editor_absoluteY="119dp" /> <Button android:id="@+id/stop_music" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/stop" tools:layout_editor_absoluteX="138dp" tools:layout_editor_absoluteY="363dp" /> </androidx.constraintlayout.widget.ConstraintLayout>

のどちらかの修正を行うと起動すると思います。(どちらを修正するかはお好みで)

以上、よろしくお願いいたします。

=== コメントに対する追記
stopボタンを押したときのエラーに関しては現状のコードだとMediaPlayerが作られていないので落ちてしまいます。startボタンを押した後にstopボタンを押すとエラーが出なくなると思います。
コードの修正としてはreleaseした後にnullを入れてnullのときはstopが押せないようにしておくと、とりあえずエラーで落ちることはなくなると思います。

stopボタンだけが表示されている件に関しては単純にレイアウトが指定されていないだけです。
layout_editor_absoluteXはデザイナー画面で表示されるだけで実際にはレイアウトされないようです(使ったことないので知りませんでした)
レイアウトに関しては今回のエラーとは直接関係ないので、とりあえず真ん中にボタンが表示されるレイアウトを示します。レイアウトの仕方についてはどのようにレイアウトしたいかがあるかと思いますので調べてみてください。

以下に、動かしたときのサンプルコードをおいておきますので適宜読み替えながら修正してみてください。(ちょっと回答が長くなってきたのでまだ修正がありそうでしたら、回答を分けようと思います。)

class MainActivity : AppCompatActivity() { private var mediaPlayer: MediaPlayer? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Button for start music val buttonStart: Button = findViewById(R.id.start) // Resister listener buttonStart.setOnClickListener { startMusic() } // Button for stop music val buttonStop: Button = findViewById(R.id.stop) // Resister listener buttonStop.setOnClickListener { stopMusic() } } fun startMusic() { mediaPlayer = MediaPlayer.create(this, R.raw.test) mediaPlayer?.isLooping = true mediaPlayer?.start() } fun stopMusic() { if(mediaPlayer == null){ return } mediaPlayer?.stop() mediaPlayer?.reset() mediaPlayer?.release() mediaPlayer = null } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="start" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="stop" app:layout_constraintTop_toBottomOf="@+id/start" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>

投稿2020/12/14 08:37

編集2020/12/14 12:55
razuma

総合スコア1313

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

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

nana_7188

2020/12/14 09:51

ご回答いただきありがとうございます。 アプリを立ち上げようとする(タップする)→黒い画面に切り替わる→アプリが落ちる(ホーム画面に戻る)という現象です。 実機でもエミュレータでも症状は同じです。 このコード以外にもmediaplayerを使用したコードを他の方がネットにあげているものをコピーし 試してみましたが、アプリを起動しようとすると同じ症状がでます。 4つほど試しましたが全てアプリを開こうとするとアプリが落ちます。 mediaplayerを使用していないアプリは落ちないです。 上記のことからmediaplayerを使用するにあたりandroidstudioで ダウンロードするものがあるのかなと考えております。 何か他に行う事等ありましたらご回答頂けますと幸いです。
razuma

2020/12/14 10:47

アプリが落ちているのであればエラーログが出ているかと思います。 コメント追記しました。よろしくお願いします。
nana_7188

2020/12/14 11:10

大変すばやいご回答ありがとうございます。 エラーログは完全に見落としておりました。 質問に追記いたしました。 何卒よろしくお願いいたします。
razuma

2020/12/14 11:29

エラー内容に対するコメントをしました。修正できないようであればまた情報をお願いいたします。 よろしくお願いします。
nana_7188

2020/12/14 11:48

1~10までご教授頂きまことにありがとうございます。 activity_main.xmlを質問に追記いたしました。 何卒よろしくお願いいたします。
razuma

2020/12/14 12:08

エラー内容の修正方法に対するコメントをしました。 よろしくお願いします。
nana_7188

2020/12/14 12:21

何度も申し訳ございません。 activity_mainを書き換えエミュレータを起動するとアプリを開くことができました。 しかし、STOPボタンだけが表示されており、STOPボタンをタップするとアプリが落ちてしまいます。 ログ及びアプリの写真を質問に追記いたしました。 何卒よろしくお願いいたします。
razuma

2020/12/14 12:55

回答追記しました。 よろしくお願いいたします。
nana_7188

2020/12/14 13:07

長時間お付き合い頂きありがとうございました。 アプリが動くようになりました。 ご教示頂いたことを活かし次に進みたいと存じます。 ありがとうございました。
razuma

2020/12/14 13:09

無事動いて良かったです。アプリ作りがんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問