【Android Studio&Kotlin】マイクやスピーカーの使用許可(パーミッション)ダイアログの表示方法

こんにちは。YOSHITAKA(@YOSHITA19704216)です。

初心者
マイクを使ったアプリを開発しているんですが、許可するにはどうしたらよいんですか?

よしたか
学んだことをアウトプットしていきます。

 

この記事を読むことで
  • Kotlinで許可(パーミッション)の設定方法がわかります。

Kotlin マイクの使用許可(パーミッション)ダイアログの表示方法

許可(パーミッション)ダイアログは必須

大前提
  • 公式サイトで理解できる方はこちらを参照してください。KotlinとJavaのバージョンが選択できます。
  • 公式サイトで確認

アプリによって使用する許可は変わりますので、随時読み替えていってください。

MainActivity.ktの下部にファンクションを追加

ユーザーの選択結果を受け取るには、onRequestPermissionsResult()を設定する必要があります。

 


/**
* マイク許可に使用
*/
private const val PERMISSION_WRITE_EX_STR = 1


/**
 * マイクの使用許可の処理
 * 表示した後の初期画面の設定を行う
 */
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode != 1234) {
        if (grantResults.all { it == PERMISSION_GRANTED }) {
            //許可された後の処理 メソッドを書きましょう
        } else {
            Toast.makeText(
                this,
                "マイク機能をOFFにしたまま起動します。",
                Toast.LENGTH_LONG
            ).show()
                //画面を閉じたい時はコメントインしてください。
            //  finish()  
        }
    }
}



1234はonRequestPermissionsResultでリクエストを判別するための数値。利用者で決めても良いのでなんの数字でも良いとのこと。

PERMISSION_WRITE_EX_STRも数値の意味はわかってないですが、1をセットしておきました

詳しくはわからないがセットしました。

onCreate内にて・・・

パーミッションを複数チェックすることもできるようですが今回は「Manifest.permission.RECORD_AUDIO」の一つだけを設定しました。

パーミッションの状態を確認するには、ContextCompat.checkSelfPermission()を使用します。

 

checkSelfPermission()の戻り値はint側で、許可されている場合は0、許可されていない場合は-1が返ってきます。

PackageManagerには、PERMISSION_GRANTED(0)と、PERMISSION_DENIED(-1)が定義されておりますので、結果の確認にはこれらを使用するのがいいらしいです。

private fun microphonePermission() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.RECORD_AUDIO
            )
            != PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this, arrayOf(
                    Manifest.permission.RECORD_AUDIO
                ),
                PERMISSION_WRITE_EX_STR
            )
        }
    }
}
ポイント
  • API23以前のバージョンでは許可ダイアログは不要なようです。

バージョンを知りたい方はこちらを確認してください。

パーミッションの宣言

AndroidManifest.xmlに、使用するパーミッションを宣言します。

今回はマイクとレコーダーを使うのでRECORD_AUDIOを使用します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hirauchi.myapplication">

<uses-permission android:name="android.permission.RECORD_AUDIO" />
//その他に必要な許可があればここにずらずら記入していきます。

(省略)
</manifest>

 

ポイント その他に許可できる機能一覧
  • READ_CALENDAR  //カレンダー
  • WRITE_CALENDAR
  • CAMERA  //カメラ
  • READ_CONTACTS  //連絡先
  • WRITE_CONTACTS  //連絡先
  • GET_ACCOUNTS
  • ACCESS_FINE_LOCATION
  • ACCESS_COARSE_LOCATION
  • RECORD_AUDIO  //マイク・スピーカー
  • READ_PHONE_STATE
  • CALL_PHONE
  • READ_CALL_LOG
  • WRITE_CALL_LOG
  • ADD_VOICEMAIL
  • USE_SIP
  • PROCESS_OUTGOING_CALLS
  • BODY_SENSORS
  • READ_EXTERNAL_STORAGE  //写真
  • WRITE_EXTERNAL_STORAGE  //写真

 

パーミッションダイアログの表示の補足

パーミッションダイアログを表示する方法についてです。パーミッションダイアログを表示するには、ActivityCompat.requestPermissions()を使用します。

ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 100)

requestPermissions()メソッドの中の

第1引数にはContext

第2引数には、パーミッションの種類を配列で指定。

第3引数には、任意のRequestCodeを指定します。

※このRequestCodeは、ユーザーの許可・拒否の選択結果を受け取る際に、どのパーミッションリクエストかを判定するために使用されます。

ちなみにこのダイアログの表示はなくても使えるようだったのであえて説明から省いています

requestPermissions()で、RequestCodeに100を指定していたので、if (requestCode == 100)という判定で、位置情報のリクエストの応答かを判定します。

 

まとめ

今回はKotlin】マイクやスピーカーの使用許可(パーミッション)ダイアログの表示方法についてお伝えしました。

※プログラミングは習得中ですので、参考程度に記事を読んでください。

 

参考にしたサイトはこちらです。

辛すぎるAndroidのApp開発を、Kotlinとコルーチンで楽にする

Androidでパーミッション許可ダイアログの出し方

【Kotlin】位置情報のパーミッションダイアログを表示する方法を解説

 

あなたは「Web集客」に限界を感じていませんか?

サイトをただ作るだけで満足ですか?

あなたのサービスやコンテンツはとっても有益なものがたくさんあります。

良いコンテンツも埋もれてしまっては全く意味がありません。

正しい知識と実践で、SEO対策はもちろん、ユーザビリティーを考えたサイトを作りませんか?

私と歩めばWebマーケティング知識とWordPressスキルが定着し、サイト回遊率、再訪問がアップします。

しかも、これだけでは終わりません!!

その先の「攻めのメディア」と組み合わせ、あなたのサービスを広めて売上を伸ばしていきます。

サイトを育てて、長い間愛されることのできるWordPressサイトからの集客導線(ゴールデンルート)を一緒に作りませんか?

↓ ↓ ↓ ↓ ↓ ↓ 

おすすめの記事