Android 开发:添加网络访问和存储权限 - 权限检测和申请指南
在 Android 开发中,为你的应用添加网络访问和存储权限是常见的需求。本文将介绍如何在 AndroidManifest.xml 文件中声明权限,以及使用运行时权限机制动态检测和申请权限的步骤。
在 AndroidManifest.xml 文件中声明权限
首先,你需要在你的 AndroidManifest.xml 文件中声明需要的权限。以下代码声明了网络访问和存储权限:
<uses-permission android:name='android.permission.INTERNET' />
<uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE' />
使用运行时权限动态检查和申请权限
从 Android 6.0(API 级别 23)开始,Android 引入了运行时权限机制,需要在代码中动态检查权限并向用户申请。以下代码示例展示了如何在 Activity 的 onCreate 方法中检查权限并申请权限:
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查网络访问权限和存储权限
if (checkSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED ||
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// 申请权限
requestPermissions(new String[]{Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
} else {
// 权限已经被授予,执行你的逻辑操作
// ...
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED &&
grantResults[1] == PackageManager.PERMISSION_GRANTED) {
// 权限已经被授予,执行你的逻辑操作
// ...
} else {
// 权限被拒绝,可以根据需要进行相应处理
// ...
}
}
}
代码说明
- 在 onCreate 方法中,我们使用
checkSelfPermission()方法检查网络访问权限和存储权限是否已经被授予。 - 如果任何一个权限没有被授予,我们使用
requestPermissions()方法向系统申请权限。 - 当用户选择允许或拒绝权限后,系统会回调
onRequestPermissionsResult()方法,你可以在该方法中处理相应的逻辑操作。
重要提示
- 在 AndroidManifest.xml 文件中声明权限只是为了声明应用需要这些权限,但并不代表应用已经获得了这些权限。
- 从 Android 6.0 开始,应用需要在运行时动态检查和申请权限。
- 当用户拒绝某个权限时,你需要根据需要进行相应处理,例如向用户解释为何需要该权限,或者提示用户无法使用某些功能。
原文地址: http://www.cveoy.top/t/topic/iFii 著作权归作者所有。请勿转载和采集!