您的位置:首页 > 移动开发 > Android开发

android 6.0运行时权限

2016-10-25 15:55 162 查看
记得在android6.0以前,应用需要权限只要在androidManifest.xml配置就可以了。为了安全的考虑,android 6.0开始使用动态申请权限,除了在androidManifest.xml配置以外,还需要在代码里面控制权限申请,虽然权限的申请变复杂了,但是对于用户来说更安全了。但也并不是所有的权限都要动态申请。需要申请的权限如下所示:
Permission GroupPermissions
CALENDAR
READ_CALENDAR

WRITE_CALENDAR

CAMERA
CAMERA

CONTACTS
READ_CONTACTS

WRITE_CONTACTS

GET_ACCOUNTS

LOCATION
ACCESS_FINE_LOCATION

ACCESS_COARSE_LOCATION

MICROPHONE
RECORD_AUDIO

PHONE
READ_PHONE_STATE

CALL_PHONE

READ_CALL_LOG

WRITE_CALL_LOG

ADD_VOICEMAIL

USE_SIP

PROCESS_OUTGOING_CALLS

SENSORS
BODY_SENSORS

SMS
SEND_SMS

RECEIVE_SMS

READ_SMS

RECEIVE_WAP_PUSH

RECEIVE_MMS

STORAGE
READ_EXTERNAL_STORAGE

WRITE_EXTERNAL_STORAGE

权限申请的代码参考如下:

public class MainActivity extends AppCompatActivity {

TextView showMsgTv;
Button onClickBtn;
private final int CAMERA_REQUEST_CODE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showMsgTv = (TextView) findViewById(R.id.show_msg_tv);
onClickBtn = (Button) findViewById(R.id.onClick_btn);
}

public void onBtnClick(View v) {
requestPermission();
}

@TargetApi(Build.VERSION_CODES.M)
private void requestPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
//第一次请求权限时,如果用户拒绝,下一次请求该方法返回true。里面向用户解释为什么需要这个权限
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
new AlertDialog.Builder(this).setMessage("申请相机权限").setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
}
}).show();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
}
} else {
showMsgTv.setTextColor(Color.GREEN);
showMsgTv.setText("相机权限已申请");
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showMsgTv.setTextColor(Color.GREEN);
showMsgTv.setText("相机权限已开通");
Toast.makeText(this, "相机权限已被开通", Toast.LENGTH_SHORT).show();
} else {
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
Toast.makeText(this, "相机权限已被禁止", Toast.LENGTH_SHORT).show();
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态权限