app在6.0之前的设备依然使用旧的权限系统。如果你还没支持新运行时权限,我建议你首先把targetSdkVersion 降级到22。
1:需要将APP的targetSdkVersion设置到23以上并且在Android6.0以上系统运行
targetSdkVersion 23
2:在AndroidManifest中配置拨打电话的权限< uses-permission android:name = "android.permission.CALL_PHONE" ></ uses-permission >3:如果不做运行时权限处理会怎么样呢?我们直接进行点击按钮拨打电话public void CallPhone(View v) {Intent intent = new Intent(Intent.ACTION_CALL);Uri data = Uri.parse( "tel:" + "10010" );intent.setData(data);startActivity(intent); }这段代码 在android 6.0系统上运行会崩溃。4:我们加上运行时权限的处理再运行private static final int REQUESTCODE = 8 ;public void CallPhone(View v) {//检查权限if (ContextCompat.checkSelfPermission( this ,Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED) {//没有权限,申请权限ActivityCompat.requestPermissions( this , new String[]{Manifest.permission.CALL_PHONE}, REQUESTCODE);} else {//已经拥有权限进行拨打call(); } }API:REQUESTCODE 的作用是为了进行回调处理,因为申请权限是有回调结果的后面会说到。ContextCompat.checkSelfPermission 主要用于检测某个权限是否已经被授予,方法参数为(context,需要检测的权限)方法返回值为PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED,当返回PackageManager.PERMISSION_DENIED时需要调用API进行权限申请。ActivityCompat.requestPermissions 用于权限的申请,方法参数为(context,需要申请的权限数组,自定义的请求码),系统会弹出一个申请权限的对话框。