大家都知道,Android6.0系统的新特性是运行时权限,为简单起见,下面以CALL_PHONE这个权限为例来示例如何使用。
CALL_PHONE这个权限是编写拨打电话的功能是需要声明的,因为拨打电话会涉及用户手机的资费问题,因而被列为危险权限。
首先,在清单文件AndroidManifest.xml中添加以下权限声明:
<uses-permission android:name="android.permission.CALL_PHONE"/>
代码实现如下:
public class PhoneCallActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_call);
Button makeCall = (Button) findViewById(R.id.make_call);
makeCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(PhoneCallActivity.this, Manifest.permission.CALL_PHONE) !=
PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(PhoneCallActivity.this, new String[]{
Manifest.permission.CALL_PHONE
}, 1);
}else {
call();
}
}
});
}
private void call(){
try{
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10000"));
startActivity(intent);
}catch (SecurityException e){
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode){
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
call();
}else {
Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
}
以上代码将运行时权限的完整流程都覆盖了,说白了,运行时权限的核心就是在程序运行过程中由用户授权我们去执行某些危险操作,程序是不可以擅自作主去执行这些危险操作的。