我们在使用一些官方app时,刚下载进去之后经常会弹出各种各样的权限获取请求,今天简单学习了下,希望不会误人子弟哈哈哈哈。
一、将需要用到的权限添加到Manifest清单里
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.RECORD_AUDIO"/>
这一步很重要,本人Debug时发现如果缺少这步,进入界面后点击屏幕毫无反应......
private static final String[] REQUEST_PERMISSIONS = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.RECORD_AUDIO,
};
private static final int PERMISSION_REQUEST_CODE = 1;
同时将对应的权限放到1个String数组里,标记一个权限申请标识码。
二、OnStart方法申请权限
在OnStart方法里判断权限是否申请过,如果没有,进行申请,申请的方法里用到了之前的String数组和权限申请标识码
@Override
protected void onStart() {super.onStart();if (!hasPermissionsGranted(REQUEST_PERMISSIONS)) {Log.d(Tag,"-------activityCompat.requestPermissions--------");ActivityCompat.requestPermissions(this, REQUEST_PERMISSIONS, PERMISSION_REQUEST_CODE);}
}
hasPermissionsGranted()方法:遍历String里的权限检测是否已经授予。
/*** ContextCompat类的checkSelfPermission方法用于检测用户是否授权了某个权限。* PackageManager.PERMISSION_DENIED : -1* PackageManager.PERMISSION_GRANTED : 0 表示授权成功*/public boolean hasPermissionsGranted(@NonNull String[] permissions) {for (String permission : permissions) {if (ActivityCompat.checkSelfPermission(this, permission)!= PackageManager.PERMISSION_GRANTED) {return false;//此时没有授权,返回false}}return true;//已经授权过,返回true}
onRequestPermissionsResult()方法:在对应的Activity中获取到回调结果,通过标识码和hasPermissionsGranted()方法判断是否授予权限成功,失败则调用finish()方法退出应用。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {Log.d(Tag,"-------onRequestPermissionsResult--------");if (requestCode == PERMISSION_REQUEST_CODE) {if (!hasPermissionsGranted(REQUEST_PERMISSIONS)) {//返回false代表申请失败Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();this.finish();}} else {super.onRequestPermissionsResult(requestCode, permissions, grantResults);}
}
综上一个简单的权限申请demo已经成功。后续也可以在定制化的申请弹窗方面研究一下。
如有错误和疑问,敬请矫正!