Android权限请求(多个)


Android运行时权限请求

很久以前,我写了如何在设置屏幕上允许具有Android系统权限的个人权限,但是我离开了很长时间,试图找出如何在应用程序中显示对话框。我检查了一下,所以我会再写一次。

此权限

这次,我们将使用以下权限来使用过去创建的录制应用程序。

AndroidManifest.xml

1
2
3
<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中显示"权限"对话框和允许的流程,完成后,过渡到startRecordingActivity并开始记录。

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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权限不需要权限,因此将显示WRITE_EXTERNAL_STRAGE和RECORD_AUDIO对话框。成功。

对话框显示?权限是否成功,但是在启动应用程序时未显示该权限,并且仅在关闭该应用程序后才显示。我真的希望在应用启动后立即显示它。再检查一遍。