【Androidアプリ入門】音声入力と時刻出力で遊んでみた♪

スマホアプリは難しいのかなと思っていたのでこれまでやらずにいたが、やってみると、
たかだか始めてから３日目ですが、なんとなく面白いので記事にしておこうと思う。

動機としては、先日の会話アプリの出来がいいので、ぜひみんなにも試してほしいのだが、スタンドアローンだとどうも反応がわからないので、スマホアプリにして音声で会話アプリまで作りたいということで、自信ないけど始めてみました。

始めて初日は、悪戦苦闘。。。ネットで探したアプリをベタ打ちで動かそうとしましたが、エラーだらけで一向に動きません。
ということで、一冊買って始めました。
初日は、ビジュアルスタジオインストールしてネットアプリを試して終わりました。
二日目は、以下の本の部品を画面に並べて実機で表示させて終わり。
今日は、三日目です。
[基礎＆応用力をしっかり育成！Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン (CodeZine BOOKS) 単行本（ソフトカバー） – 2019/7/10
WINGSプロジェクト 齊藤 新三  (著), 山田 祥寛 (監修)](https://www.amazon.co.jp/%E5%9F%BA%E7%A4%8E%EF%BC%86%E5%BF%9C%E7%94%A8%E5%8A%9B%E3%82%92%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E8%82%B2%E6%88%90%EF%BC%81Android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-Kotlin%E5%AF%BE%E5%BF%9C-%E3%81%AA%E3%82%93%E3%81%A1%E3%82%83%E3%81%A3%E3%81%A6%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AB%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%9F%E8%B7%B5%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3-CodeZine-BOOKS/dp/479816044X/ref=pd_sbs_14_1/357-2644781-4484045?_encoding=UTF8&pd_rd_i=479816044X&pd_rd_r=4ce2bc1a-1d28-4ef0-a849-5abe4d789266&pd_rd_w=OHdvl&pd_rd_wg=woRkJ&pf_rd_p=1585d594-d9d0-474b-8a4e-69eca1566911&pf_rd_r=W6FV393KEDSAWK06NFGX&psc=1&refRID=W6FV393KEDSAWK06NFGX)
###やったこと
・写経しました
・時刻を表示
・音声入力ができる♪
###・写経しました
まず、開発環境はAndroidStudioをインストールしました。
言語は当初Javaでやろうと考えていましたが、Kotlinの方がコード量が削減できそうなので、Kotlinで始めました。
本書は、サンプルコード公開なのでそれをダウンロードすれば必要ありませんが、ここまでほぼ写経しています。
以下のstrings.xmlとactivity_main.xmlは、写経のまんまです。

```strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">イベントとリスナサンプル</string>
    ...
    <string name="bt_click">表示</string>
</resources>
```

```activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:orientation="vertical">

    <TextView
        ...
        android:text="@string/tv_name"/>

    <EditText
        android:id="@+id/etName"
        ...
        android:inputType="text" />

    <Button
        android:id="@+id/btClick"
        ...
        android:text="@string/bt_click"/>

    <TextView
        android:id="@+id/tvOutput"
        ...
        android:text=""
        android:textSize="25sp" />
```
一方、ボタン押したときのイベント時のロジックは以下が写経のまんまです。

```MainActivity.kt
package com.example.hellosample

import androidx.appcompat.app.AppCompatActivity
...
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...
        //表示ボタンにリスナを設定。
        btClick.setOnClickListener(listener)
    }
    // ボタンをクリックしたときのリスナクラス
    private inner class HelloListener : View.OnClickListener {
        override fun onClick(view: View) {
            //名前入力欄であるEditTextオブジェクトを取得。
            ...
            val inputStr = input.text.toString()

             //メッセージを表示。
            output.text = inputStr + "さん、こんにちは!"
        }
    }
}
```
###・時刻を表示
変更箇所は上記の`override fun onClick(view: View) {`内のメッセージ表示を以下のように追記変更しました。
【参考】
[Kotlinで文字列を数値、日付文字列を日付(java.util.Date)、日付を文字列(String)に変換する](https://qiita.com/emboss369/items/5a3ddea301cbf79d971a)

```MainActivity.kt
import java.text.SimpleDateFormat
import java.util.Date

    private inner class HelloListener : View.OnClickListener {
        override fun onClick(view: View) {
            //名前入力欄であるEditTextオブジェクトを取得。
            ...
            val inputStr = input.text.toString()
            val df = SimpleDateFormat("HH:mm:ss")  //"yyyy/MM/dd HH:mm:ss"
            val date = Date()
            println(df.format(date))

            //メッセージを表示。
            output.text = df.format(date) + "\n"+inputStr + "さん、こんにちは!"
        }
```
###・音声入力ができる♪
出来上がったアプリはAndroid実機で実行できて、以下のような画面になります。
コード見るとわかるけど、以下のTextエリアに入力して表示を押すと、入力されたものが下に表示されるというアプリです。

||||
|:-:|:-:|:-:|
| | ![androidgamen.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/e8b2beaf-f456-bd9e-26e9-2b723ccfe350.jpeg) | |
||||

ところが、これを実機で入力すると以下のように音声入力を選べるようになりました。
というか、入力方式はほかのアプリでも同じように選べて共通なんですね。
会話アプリ作るときどうしようか考えていましたが、な～んだという感じです。
###まとめ
・スマホアプリを作成三日目で音声入力と時刻出力で遊んでみた
・上記の３つのファイル、特にMainActivity.ktでいろいろ遊べることが分かった

・画像や音声ファイルやGPSを利用して、もう少し高度なアプリを作る
・会話アプリを作ろうと思う