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