Android 权限列表及使用场景

发布时间:2023-12-08

Android 权限列表及使用场景

更新:2023-05-14 00:31 Android 提供了丰富的权限控制机制,应用可以通过系统 API 来获取用户授权后使用各种系统功能,如访问网络、读取手机信息、使用摄像头等等。在开发 Android 应用时,了解各种权限的含义和使用场景非常重要。本文将从多个方面阐述 Android 权限列表及使用场景。

一、常见的 Android 权限

1. 权限说明

Android 权限分为正常权限和危险权限两种。其中正常权限不需要用户授权即可使用,而危险权限需要用户在应用使用时进行授权,用户可以选择授权或者拒绝。危险权限涉及到用户的隐私、数据安全等方面,开发者必须对其使用进行极度谨慎。以下是常见的 Android 权限列表。

2. Android 权限列表

权限名称 权限分组 权限说明
ACCESS_COARSE_LOCATION 位置信息 此应用程序可以访问设备的近似位置。
ACCESS_FINE_LOCATION 位置信息 此应用程序可以访问设备的精确位置。
CAMERA 设备信息 此应用程序可以使用摄像机进行拍照或视频录制。
READ_CONTACTS 设备信息 此应用程序可以读取您的联系人。
WRITE_CONTACTS 设备信息 此应用程序可以写入您的联系人。
READ_PHONE_STATE 设备信息 此应用程序可以读取您的电话状态和身份。
CALL_PHONE 设备信息 此应用程序可以拨打电话,而不需要您的输入。
RECORD_AUDIO 设备信息 此应用程序可以录制您的声音。
READ_EXTERNAL_STORAGE 存储 此应用程序可以读取您的存储卡上的文件。
WRITE_EXTERNAL_STORAGE 存储 此应用程序可以写入您的存储卡上的文件。

3. Android 权限使用场景

(1)位置信息权限

当应用程序需要访问设备的位置信息时,必须使用 ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION 权限。例如,应用程序可能需要在地图上显示用户的位置,或者通过 GPS 定位服务跟踪用户的实时位置。

(2)设备信息权限

当应用程序需要访问设备的电话状态、联系人、摄像机或麦克风等硬件信息时,必须使用相应的权限。例如,如果应用程序要使用摄像机进行拍照或视频录制,必须使用 CAMERA 权限。

(3)存储权限

当应用程序需要访问设备的存储空间时,必须使用 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限。例如,应用程序可能需要读取或写入用户的照片、音乐或视频等文件。

二、动态申请权限

1. 为什么需要动态申请权限?

在 Android 6.0 及以上版本中,使用危险权限必须在运行时进行动态申请。这意味着应用程序不能在应用安装时请求授权,必须在应用程序运行时请求授权。动态申请权限可以提高应用程序的安全性,用户可以更好地控制应用程序对其隐私和数据的访问。

2. 动态申请权限的步骤

(1)添加权限到 AndroidManifest.xml 文件中

AndroidManifest.xml 文件中添加应用程序需要的权限,例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <uses-permission android:name="android.permission.CAMERA" />
</manifest>

(2)检查是否已经授权

在应用程序运行时,应先检查应用是否拥有所需的权限。如果已经授权,则可以继续执行应用程序的后续任务。例如:

if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.CAMERA)
        != PackageManager.PERMISSION_GRANTED) {
    // No explanation needed; request the permission
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.CAMERA},
            MY_PERMISSIONS_REQUEST_CAMERA);
} else {
    // Permission has already been granted
    openCamera();
}

(3)请求权限

如果应用程序没有所需的权限,则必须请求授权。可以使用 ActivityCompat.requestPermissions() 方法请求授权。例如:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.CAMERA)
        != PackageManager.PERMISSION_GRANTED) {
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.CAMERA)) {
        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.
        new AlertDialog.Builder(this)
                .setTitle("Camera permission")
                .setMessage("We need your permission to use the camera.")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Prompt the user once explanation has been shown
                        ActivityCompat.requestPermissions(MainActivity.this,
                                new String[]{Manifest.permission.CAMERA},
                                MY_PERMISSIONS_REQUEST_CAMERA);
                    }
                })
                .create()
                .show();
    } else {
        // No explanation needed; request the permission
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.CAMERA},
                MY_PERMISSIONS_REQUEST_CAMERA);
    }
}

(4)处理权限请求的结果

应用程序必须实现 onRequestPermissionsResult() 方法以处理权限请求的结果。例如:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_CAMERA: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! Do the
                // camera-related task you need to do.
                openCamera();
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                Toast.makeText(MainActivity.this, "Permission denied to use camera",
                        Toast.LENGTH_SHORT).show();
            }
            return;
        }
        // other 'case' lines to check for other
        // permissions this app might request.
    }
}

三、总结

在 Android 应用程序开发中,了解和正确使用 Android 权限是非常重要的。本文介绍了 Android 常见的权限列表和使用场景,并详细阐述了动态申请权限的步骤。正确地使用 Android 权限可以维护用户的隐私和数据安全,提高应用程序的安全性。