10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidのパーミッションリクエスト(複数)

Posted at

AndroidのRuntime Permission Request

かなり前にAndroidシステムパーミッションで設定画面から個別にPermissionを許可する方法を書いたが、アプリでダイアログを表示する方法を調べようとしてずっと放っておいた。調べていじってみたのでまた書く。

今回のPermission

今回は過去に作成した録音アプリを利用するため、以下のPermissionを使用する。

AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE"/>

コード

MainActivityでPermissionのダイアログ表示や許可を行い、完了したらstartRecordingActivityに遷移して録音を開始する、という流れ。

MainActivity.java
package com.example.testrecordingpermission;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.Manifest;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private final int REQUEST_CODE = 1000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Android 6, API 23以上でパーミッションの確認
        if(Build.VERSION.SDK_INT >= 23) {
            String[] permissions = {
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.RECORD_AUDIO,
                    Manifest.permission.VIBRATE
            };
            checkPermission(permissions, REQUEST_CODE);
        }

        startRecordingActivity();
    }

    // 位置情報許可の確認
    public void checkPermission(final String[] permissions,final int request_code){
        // 許可されていないものだけダイアログが表示される
        ActivityCompat.requestPermissions(this, permissions, request_code);
    }

    // requestPermissionsのコールバック
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch(requestCode) {

            case REQUEST_CODE:
                for(int i = 0; i < permissions.length; i++ ){
                    if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                        Toast toast = Toast.makeText(this,
                                "Added Permission: " + permissions[i], Toast.LENGTH_SHORT);
                        toast.show();
                    } else {
                        Toast toast = Toast.makeText(this,
                                "Rejected Permission: " + permissions[i], Toast.LENGTH_SHORT);
                        toast.show();
                    }
                }
                break;
            default:
                break;
        }
    }

    // Intent でstartRecording
    private void startRecordingActivity() {
        Intent intent = new Intent(getApplication(), RecordingActivity.class);
        startActivity(intent);
    }
}

結果

VIBRATEのPermissionは許可が必要ないのでWRITE_EXTERNAL_STRAGEとRECORD_AUDIOのダイアログが表示される。成功。

      

ダイアログ表示・許可が成功したが、アプリ起動時には表示されず、一度アプリを終了させて初めて表示された。本当はアプリ起動後すぐに表示されてほしい。また調べる。

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?