Android运行时权限功能

Posted qq69496

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android运行时权限功能相关的知识,希望对你有一定的参考价值。

android中权限分为普通权限和危险权限,其中危险权限需要在运行时申请。下面以CALL_PHONE这个权限举例:

布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/make_call"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Make Call" />

</LinearLayout>
清单文件
<uses-permission android:name="android.permission.CALL_PHONE" />
MainActivity
public class MainActivity extends AppCompatActivity {

    private Button makeCall;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        makeCall = findViewById(R.id.make_call);
        makeCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.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:10086"));
            startActivity(intent);
        } catch (SecurityException 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) {
                    call();
                } else {
                    Toast.makeText(this, "You denied the permission", Toast.LENGTH_LONG).show();
                }
                break;
            default:
        }
    }
}
程序中一些方法的介绍

ContextCompat.checkSelfPermission()方法用于判断是否授权,其中包含两参数,第一个参数是Context, 第二个参数是权限名。

PackageManager.PERMISSION_GRANTED常量代表已授权。

ActivityCompat.requestPermissions()方法用于请求申请权限,包含三个参数,第一个Context,第二个权限名,不过需要String数组的形式,这样就可以支持多权限申请,第三个请求码,任意唯一值即可。

当requestPermissions()方法被调用后,结果会自动传到onRequestPermissionsResult()方法。

onRequestPermissionsResult()也包含三个参数,第一个请求码,通过请求码定位到相应的requestPermissions()方法,第二个参数权限名,与requestPermissions()方法中的权限名对应,第三个参数,请求结果数组,其中每一个值对应代表权限名数组中权限的请求结果,请求成功的值为PackageManager.PERMISSION_GRANTED,请求失败为PackageManager.PERMISSION_DENIED,这样的话,数组长度代表请求权限的个数,其中对应的值可通过PERMISSION_GRANTED和PERMISSION_DENIED来判断权限请求是否成功。

以上是关于Android运行时权限功能的主要内容,如果未能解决你的问题,请参考以下文章

Android运行时权限功能

Android运行时权限功能

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

Android 运行时权限

Android动态运行时权限

Android动态运行时权限