Android(安卓)运行时权限申请之电话权限(兼容6.0以上)
16lz
2021-01-25
Android 运行时权限申请之电话权限(兼容6.0以上)
运行时权限的申请一般是危险权限的申请,在android 6.0以后,所有的危险权限都需要用户手动的确认是否开启。下面图片是所有的危险权限。不必牢记,需要用的时候直接查询即可。本文来看电话权限的申请。
1.首先在AndroidManifest.xml中申明权限
<!--拨打电话权限--><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
2.当android 6.0以下时直接运行以下代码就可以调用拨打电话了
try { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("10086")); startActivity(intent);}catch (SecurityException e){ e.printStackTrace();}
3.但在android 6.0以后,由于安全问题,拨打电话属于危险权限,需要用户手动去开启。
除了同样在启动的时候申明权限外,需要在运行的时候进行权限的判断。checkSelfPermission接收上下文和打电话权限两个参数,PERMISSION_GRANTED代表用户同意开启打电话权限。所以上面的代码修改下面的代码,就能同时兼容6.0以上和以下的版本了:
//弹出权限检查 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1); }else { callPhone(); }/** * 拨打电话 */private void callPhone(){ try { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("10086")); startActivity(intent); }catch (SecurityException e){ e.printStackTrace(); }}/** * 监控权限变化 * @param requestCode * @param permissions * @param grantResults */@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch(requestCode){ case 1: if (grantResults.length>0&&grantResults[0] == PackageManager.PERMISSION_GRANTED){ callPhone(); } break; default: }}
ps:本文只是拿打电话权限来举事例,如别的权限还有位置权限,我们只需要把Manifest.permission.CALL_PHONE替换成位置权限即可
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 一个android文本比对APP的实现(三)-设计模式在文件选择模块中的运用
- Android中的Toast重复显示的问题
- Android(安卓)APP如何防止二次打包揭秘。
- [置顶] Android(安卓)4.0 中由ProGuard引发的一场血案
- Android动态权限申请
- Android(安卓)SDK开发指南(翻译)系列一:最佳实践(二)-- 反应速度设
- Android(安卓)USB串口通信实现 以及绕过USB弹框验证
- Android(安卓)双击返回键退出程序的方法总结