package com.zjw.myapplication;
import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
//1.2.2 p30 运行时权限机制
/*
Android 6.0新特性
除了危险权限,其他都是普通权限,权限组中任何一个被授权,其他也被自动授权
Dangerous Permissions:
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.CAMERA
permission:android.permission.CAMERA
group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS
*/
/*
定义一个按钮打电话
第一次会询问是否授予权限,拒绝授予后,第二次会多一个不再询问,如果用户勾选了不再询问,我们可以给用户一个友好提示
shouldShowRequestPermissionRationale方法用于帮助 开发者向用户解释权限的情况,用户勾选“不再询问”,该方法会返回false
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
Button btnCall = (Button) findViewById(R.id.btn_call);
//按钮点击事件
btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermission(); //申请权限
}
});
}
//申请权限
private void requestPermission() {
//运行时权限,检查有没有
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//没有就申请权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
//用户如果之前就允许了权限之后进行的操作
callPhone(); //打电话
}
}
//打电话
private void callPhone() {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "10086"));
try {
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
//权限回调
//运行时权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//如果用户允许请求进行的操作
callPhone();
} else {
//如果用户拒绝请求进行的操作
if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CALL_PHONE)) {
AlertDialog alertDialog=new AlertDialog.Builder(this)
.setMessage("该功能需要访问电话的权限,不开启将无法工作!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create();
alertDialog.show();
}else{
Toast.makeText(this, "You denid the permission", Toast.LENGTH_SHORT).show();
}
}
return;
default:
break;
}
}
}
转载于:https://my.oschina.net/u/3620480/blog/1524347
本文深入探讨了Android 6.0的运行时权限机制,详细解析了危险权限及其分组,如联系人、电话、日历等,并通过示例代码展示了如何在应用中实现运行时权限请求,包括权限检查、请求和处理用户拒绝情况。
1099

被折叠的 条评论
为什么被折叠?



