在Android程序中,在执行访问网络、读取联系人等操作时,必须声明权限。当Android系统版本低于6.0时,所有权限只需要在AndroidManifest文件中声明即可。使用相应的功能。但是在Android6.0及以上版本,Android将权限分为普通权限和危险权限。普通权限的使用和之前的Android版本一样,只需要在AndroidManifest文件中声明即可。系统会自动为我们授权,但是dangerouspermissions不仅要在AndroidManifest文件中声明,还需要在使用权限的时候使用代码判断用户授权,并对用户授权结果做相应的处理.那么哪些权限是危险权限呢?下面给出了Android的所有危险权限。除了下表中的危险权限外,其他权限都是Android常见的权限:我们可以通过权限组来大致记住危险权限。:读写日历:android.permission.READ_CALENDARandroid.permission.WRITE_CALENDAR使用相机:android.permission.CAMERA读写联系人:android.permission.READ_CONTACTSandroid.permission.WRITE_CONTACTSandroid.permission.GET_ACCOUNTS位置服务:android.permission.ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION电话:android.permission.READ_PHONE_STATEandroid.permission.CALL_PHONEandroid.permission.READ_CALL_LOGandroid.permission.WRITE_CALL_LOGandroid.permission.ADD_VOICEMAILandroid.permission.USE_SIPandroid.permission.PROGRESS_OUTGOING_CALLS使用传感器:android.permission.BODY_SENSORS短信:android.permission.SEND_SMSandroid.permission.RECEIVE_SMSandroid.permission.READ_SMSandroid.permission.RECEIVE_WAP_PUSHRECEIVE_MMS读写手机存储:android.permission.READ_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGE好了,以上就是我们在Android中使用的所有危险权限,权限不能只存在于AndroidManifest文件中在代码中声明需要处理用户授权。下面是一个简单的例子,看看如何处理代码中的危险权限:创建一个新的Android项目:activity_main.xml:很简单的布局文件,一行EditText控件用于电话号码,一行Button用于打电话::接下来是MainActivity.java:packagecom.example.administrator.blogandroidpermissiondeal;importandroid。清单;导入android。content.Intent;importandroid.content.pm.PackageManager;importandroid.net.Uri;importandroid.support.annotation.NonNull;importandroid.support.v4.app.ActivityCompat;importandroid.support.v4.content.ContextCompat;importandroid.support。v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText=(EditText)findViewById(R.id.phonenumberEditText);button=(Button)findViewById(R.id.callPhoneButton);button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){/**首先判断用户之前是否允许对我们应用的调用权限,*如果是,则直接调用,如果否,则申请给用户并回调onRequestPermissionResult方法*/if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED){/**下面是申请权限,第二个参数填写权限名,如果有多个权限,则在第二个参数String数组中添加多个权限参数*/ActivityCompat.requestPermissions(MainActivity.this,newString[]{Manifest.permission.CALL_PHONE},PERMISSION_REQUEST_CODE);}else{callPhonenumber();}}});}privatevoidcallPhonenumber(){try{Intentintent=newIntent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:"+editText.getText().toString()));startActivity(intent);}catch(Exceptione){e.printStackTrace();}}/**当我们向用户申请权限时,用户操作的结果会调用这个方法,不管用户是允许还是禁止,*我们要在这个方法中做相应的处理*/@OverridepublicvoidonRequestPermissionsResult(intrequestCode,@NonNullString[]permissions,@NonNullint[]grantResults){super.onRequestPermissionsResult(requestCode,permissions,授予结果);switch(requestCode){/**判断传入的requestCode*/casePERMISSION_REQUEST_CODE://如果用户授权if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){callPhonenumber();}else{Toast.makeText(this,"调用权限已被用户拒绝",Toast.LENGTH_SHORT).show();}}}}在MainActivity.java中我们已经处理好了我们需要的权限,最后别忘了添加调用调用的声明AndroidManifest文件中的权限:让我们运行它:我们输入一个数字并单击“拨号”按钮:因为我们是第一次运行这个程序,因此,用户之前没有给我们的程序授权过,所以出现权限申请对话框,我们点击DENY(否):弹出提示框成功,那我们再试一次,点击ALLOW(允许)试试:成功进入并制作一个call界面,拨我们输入的电话号码!当我们允许后,程序以后就不需要用户授权了,即可以直接调用(除非用户在应用管理中撤销了我们的调用权限)