ボタンを押して音を出すアプリを作りたいのですが。

846 views
Skip to first unread message

鈴木幻山

unread,
Jan 20, 2020, 4:35:53 AM1/20/20
to 日本Androidの会
2つのボタンを用意して、それぞれ画面遷移とオーディオを鳴らしたいのです。ソースは


です。エラーにはならず、一瞬起動してすぐに画面が消えてしまいます。繰り返し起動すると
! アプリ情報
× アプリを閉じる
という画面が出て来てアンインストールするコトになります。

根本的な何かをミスしているのだと思います。アドバイスをお願いします。。。

Hirokazu Fukami

unread,
Jan 20, 2020, 8:52:06 AM1/20/20
to android-g...@googlegroups.com
こんばんはfkmです

アプリが落ちたときのログを確認してください。
> --
> このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/android-group-japan/d6f038af-a6fe-4342-9e41-b446b77bee31%40googlegroups.com にアクセスしてください。



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

pone yata

unread,
Jan 20, 2020, 11:28:43 AM1/20/20
to android-g...@googlegroups.com
はじめまして、yataponeです。

エラー内容がわからないため推測となりますが、
下記がちぐはぐになっているためと思われます。
MainActivity / activity_main と HarmActivity / activity_harm

7行目: import kotlinx.android.synthetic.main.activity_main.*
18行目: setContentView(R.layout.activity_harm)
22行目: btn1.setOnClickListener{ ButtonTapped(it) }

22行目では、7行目により activity_main の btn1 と認識されてビルドエラーになりませんが、
実行すると18行目で activity_main ではなく activity_harm がセットされたため
btn1のnull参照で落ちていると思います。(activity_harm には btn1 が無い)
18行目をactivity_mainにすれば動くのではないでしょうか。


2020年1月20日(月) 18:36 鈴木幻山 <suzuki...@gmail.com>:
--

鈴木幻山

unread,
Jan 20, 2020, 9:06:56 PM1/20/20
to 日本Androidの会
fkmさんへ、毎度お世話になります。早速のご回答をありがとうございます。

エラーにはなりませんが、三角の!マークは出て来ます。長ったらしいメッセージですが、最後に

: Parameter 'view' is never used

という赤文字が出て来ました。

yataponeさんへ、ご回答をありがとうございます。

別のActivitiからコピペしてそのままだったので18行目を見逃していました。無事起動に成功。
22行目は正しくは

harmbtn.setOnClickListener{ ButtonTapped(it) }

音を出すbtn1と一緒の名前だったので本来の名前に変更しました、コレで画面の遷移は実行できます!

が、今度は48行目の本来のmtn1で音が鳴るはずですが、動作しません。

ボタンで音を出す別のアプリは過去に実効出来ていて、そこから抜粋して実装しています。で、やっぱり

: Parameter 'view' is never used

というメッセージが出て来て怒られます。多分25行目が問題になっていると思いますが、

fun ButtonTapped(view: View?) {

viewを使ってはダメと言われても、どうしたらいいのでしょうか?


2020年1月20日月曜日 18時35分53秒 UTC+9 鈴木幻山:

鈴木幻山

unread,
Jan 20, 2020, 11:17:39 PM1/20/20
to 日本Androidの会
因みに、20〜27行目の「//ボタン」部分をバッサリ削除すると、音が鳴ります。

2つのボタンが混在するとダメですね。

2020年1月20日月曜日 18時35分53秒 UTC+9 鈴木幻山:

pone yata

unread,
Jan 21, 2020, 9:38:23 AM1/21/20
to android-g...@googlegroups.com
こんばんは。yataponeです。

まず「Parameter 'view' is never used」の意味は
「使ってはダメ」ではなく、「一度も使われていない」です。
ButtonTappedという店舗の関数にviewというアルバイトを引数として連れてきたけど
店舗内でどこからも使われていないから無駄ですよ、という意味です。
AndroidStudioという経営コンサルタントがそっと分析しているようなものです。
これは店舗運営を止めるエラーではなく警告で、本題の問題ではありません。


onCreate内のコードはそのActivityが作られる時に一度だけ実行されます。
btn.setOnClickListener{ code } については「btnが押されたらcodeを実行して」と登録するもので、
こちらも一度だけ実行すればよく、以後btnが押される度にcodeの内容が実行されます。

ところがご提示されているコードでは22行目でxxx.setOnClickListener、
そのxxxを押す度に実行されるButtonTapped関数の中でさらにsetOnClickListenerを
実行しているため、肝心な中身が実行されないorエラーになっていると思います。
(20-27行目を削除したら動く、という状態と比較してよく考察してください)

> 2つのボタンを用意して、それぞれ画面遷移とオーディオを鳴らしたい
本来やりたいことが上記であれば、下記のような構成で可能なはずです。
    btn1.setOnClickListener{
        val intent = Intent(this, HarmActivity::class.java)
        startActivity(intent)
    }
    btn2.setOnClickListener{
        soundPool.play....
    }
リリースされたというアプリを含め今まで書いたコードを落ち着いて整理してみてください。


最後に、コード実行時の確認方法として
下記を追記してAndroidStudio画面下部のLogcatで観察するようにしてください。
(起動したときのログ、ボタンを押した時のログ)
- MainActivity上部のimport群に「import android.util.Log」
- onCreate内に「Log.d("MainActivity", "onCreate: ")」
- xxx.setOnClickListener内に「Log.d("MainActivity", "xxx.onClick: ")」

手取り足取りで口出しするのはご自身のためにもなりませんが、
Logを入れて動作確認するのは開発の必須手法です。自走できるようになれればと思います。


2020年1月21日(火) 11:07 鈴木幻山 <suzuki...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/android-group-japan/016bb6eb-ef5a-4fb0-8165-61b9518d1365%40googlegroups.com にアクセスしてください。

鈴木幻山

unread,
Jan 21, 2020, 9:09:03 PM1/21/20
to 日本Androidの会
yataponeさんへ、おはようございます。ご回答をありがとうございます。

アドバイスを元に


と、コードを修正しました。動きました!!!^^v
自力での解決は困難と諦めかけていただけに嬉しさと喜びが沢山です。

詳しい解説も頂戴しましたが、正直半分も理解出来ていません(汗
でも、改めてソースを見直すと本当はちゃんとやればシンプルなのだと思いました。

教則本3冊ではやりたいコトに手が届かない、相当数をググってみましたが情報が古いのが多い。

ここに辿り着けて良かった^^ fkmさん、yataponeさん、ありがとうございました m(_ _)m
本当に、反応を貰えるだけで心が折れずに済みました^^


2020年1月20日月曜日 18時35分53秒 UTC+9 鈴木幻山:

pone yata

unread,
Jan 22, 2020, 8:15:21 AM1/22/20
to android-g...@googlegroups.com
鈴木幻山さん
こんばんは。yataponeです。

些細なつっこみどころはありますが、まずはおめでとうございます!
私もAndroid開発を始めた当初は独学でしたのでとても苦労しました。

ネット上のサンプルは取っ掛かりとして大変ありがたいものですが、
古い情報や誤った情報であったり、自分のコードに取り入れたら動かないということもあります。
取り入れようとしたコードの一つ一つが何をしているものかを調べたり、
ログやエラーを読み飛ばさずしっかり検証していくことが大事だと思います。
時間はかかりますがやがてご自身の知識になり、結果的に近道になります。

「アクティビティのライフサイクル」について今後学習されると良いと思います。
(onCreate, onResume, onPause, onDestroy...etc)
ここまでの流れはアプリを起動して画面が立ち上がるところまでの「片道」ですが、
・音を出した直後にホームボタンを押したけどまだ音が鳴り続けてる(やだキモい!)
・次の画面に遷移した後で元の画面に戻ったときに音が鳴らないよ
・スマホを回転したら勝手に元の画面に戻ったよ
などといったことに対処する必要が出てくるはずです。
上記に対応するにはライフサイクルのどのタイミングで
どの処理を行うべきかを考慮する必要が出てきます。
ご健闘をお祈りします!

2020年1月22日(水) 11:09 鈴木幻山 <suzuki...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/android-group-japan/ce9fe692-0e0f-4ecb-a4bf-d0e066c53eac%40googlegroups.com にアクセスしてください。

鈴木幻山

unread,
Jan 22, 2020, 8:49:16 AM1/22/20
to 日本Androidの会
yataponeさん、こんばんは。

実は単一画面に6つの音源を鳴らすアプリを既に承認されて公開済みです。しかしですね...

・音を出した直後にホームボタンを押したけどまだ音が鳴り続けてる(やだキモい!)
それどころか、複数タップすると全部鳴ってしまいます。制作するのは6音源*3画面(つまり18音源)なので大変です。

・次の画面に遷移した後で元の画面に戻ったときに音が鳴らないよ
コレは現在作成中なので(まだLayoutに手こずっています)、そういう問題が出ないように祈るばかりです。

・スマホを回転したら勝手に元の画面に戻ったよ
それ以前に回転の固定をしたいのです。公開中のアプリはManifest.xmlに

android:screenOrientation="landscape">

と入れてあるのですが、実機では固定できていません。不完全なまま公開されています(汗
細かく音の実装を公開しているサイトも見つけましたが、他にもやらなければならないコトが多すぎます。

しか〜し! です、先行して開発していたiOSバージョンの「6音源*3画面のアプリ」が
今日の夕方「配信準備完了」のお知らせが届きました(パチパチ!!!

そっちはほぼ完全な仕上がりですから(Appleさん厳しかった)、Androidバージョンを仕上げたいと思います。

>ご健闘をお祈りします!

ありがとうございます。色々試して作業していると時間を忘れますねw
今後とも宜しくお願いします。。。


2020年1月20日月曜日 18時35分53秒 UTC+9 鈴木幻山:

pone yata

unread,
Jan 22, 2020, 10:48:33 AM1/22/20
to android-g...@googlegroups.com
こんばんは。yataponeです。

> 実機では固定できていません。
シミュレータの端末設定の画面回転が無効になっているまま、
シミュレータ外部のコントローラで回転表示させただけで、
固定できていると認識されているのではないでしょうか。

また、android:screenOrientation属性は、applicationの属性ではなくactivityの属性です。
間違えてapplication属性に書いても警告は出ませんが効きません。
(<application ... 直下ではなく、<activity ... の配下に書く必要があります)


2020年1月22日(水) 22:49 鈴木幻山 <suzuki...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/android-group-japan/1665057e-2015-4454-a276-2767d299bf56%40googlegroups.com にアクセスしてください。

鈴木幻山

unread,
Jan 22, 2020, 6:59:06 PM1/22/20
to 日本Androidの会
yataponeさん、おはようございます。

ググったらAndroidManifest.xmlで行う場合が多く出てくるので、それを実装していました。
確かに色が変わらないので認識していないなとは思いましたが、Activityで行う方法も少数見られます。

1つ何かやるとエラーが出たりするので躊躇っていましたが、やってみたら出来ました!
ぐぅ... 情けない(古い情報が多い)。音関係をもっとちゃんと動作させて次期リリースにします。

アイコンもGoogle Play Consoleで登録したのに反映されないな、と思ってサポートに問い合わせもしたのです。
「Google Play Consoleの設定では?」というお返事で、う〜んだったのですが、ちゃんとAndroid Studioで設定できるじゃないですか。
コレもググったら幾つか出て来ましたが、「それぞれのサイズで...」とかあるのに一発で出来るんですね。
参考書を3冊も買ったのに、アプリの顔であるアイコンに言及したものは皆無です。

それはさておき、また助けて貰いました。質問ばかりで申し訳ないと思います。独学でやったのは凄いですね。
英語が苦手なので避けていましたが、今は翻訳の精度が高いので読んで勉強したいと思います。

ありがとうございました!


2020年1月20日月曜日 18時35分53秒 UTC+9 鈴木幻山:
Reply all
Reply to author
Forward
0 new messages