android 存储 权限检查,Android手动检查并申请权限方法

Android权限一般是在AndroidManifest.xml中声明,在安装或首次使用的时候系统会自动提示用户是否提供权限

Android官方文档:

Then, when the application is installed on the device, the installer determines whether or not to grant the requested permission by checking the authorities that signed the application's certificates and, in some cases, asking the user. If the permission is granted, the application is able to use the protected features. If not, its attempts to access those features will simply fail without any notification to the user.

但有时候因为手机设备等原因,并没有在一开始就弹出提示框让用户确认是否提供权限,对于有些权限,不确认的话就不提供权限,因此,有些功能就无法实现。

这时候需要我们手动检查是否已经拥有权限,没有的话就调用代码提示用户提供权限。

如何手动检查并申请权限

如:在写入之前检查是否有WRITE_EXTERNAL_STORAGE权限,没有则申请权限

代码:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)

!= PackageManager.PERMISSION_GRANTED) {

//申请WRITE_EXTERNAL_STORAGE权限

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},

WRITE_EXTERNAL_STORAGE_REQUEST_CODE);

}

请求权限后,系统会弹出请求权限的Dialog,允许即可

用户选择允许或拒绝后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

doNext(requestCode,grantResults);

}

PS:

在Android6.0,有些权限只需要在AndroidManifest.xml文件中声明即可,但有些除了声明以外,还需要在运行时判断,即用户确认,需要确认的权限如下:

身体传感器

日历

摄像头

通讯录

地理位置

麦克风

电话

短信

存储空间

Android6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限,

所以如果你以前的APP设置的targetSdkVersion低于23,在运行时也不会崩溃,

但这也只是一个临时的救急策略,用户还是可以在设置中取消授予的权限。

以下权限只需要在AndroidManifest.xml中声明即可使用:

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS

android.permission.ACCESS_NETWORK_STATE

android.permission.ACCESS_NOTIFICATION_POLICY

android.permission.ACCESS_WIFI_STATE

android.permission.ACCESS_WIMAX_STATE

android.permission.BLUETOOTH

android.permission.BLUETOOTH_ADMIN

android.permission.BROADCAST_STICKY

android.permission.CHANGE_NETWORK_STATE

android.permission.CHANGE_WIFI_MULTICAST_STATE

android.permission.CHANGE_WIFI_STATE

android.permission.CHANGE_WIMAX_STATE

android.permission.DISABLE_KEYGUARD

android.permission.EXPAND_STATUS_BAR

android.permission.FLASHLIGHT

android.permission.GET_ACCOUNTS

android.permission.GET_PACKAGE_SIZE

android.permission.INTERNET

android.permission.KILL_BACKGROUND_PROCESSES

android.permission.MODIFY_AUDIO_SETTINGS

android.permission.NFC

android.permission.READ_SYNC_SETTINGS

android.permission.READ_SYNC_STATS

android.permission.RECEIVE_BOOT_COMPLETED

android.permission.REORDER_TASKS

android.permission.REQUEST_INSTALL_PACKAGES

android.permission.SET_TIME_ZONE

android.permission.SET_WALLPAPER

android.permission.SET_WALLPAPER_HINTS

android.permission.SUBSCRIBED_FEEDS_READ

android.permission.TRANSMIT_IR

android.permission.USE_FINGERPRINT

android.permission.VIBRATE

android.permission.WAKE_LOCK

android.permission.WRITE_SYNC_SETTINGS

com.android.alarm.permission.SET_ALARM

com.android.launcher.permission.INSTALL_SHORTCUT

com.android.launcher.permission.UNINSTALL_SHORTCUT

以上这篇Android手动检查并申请权限方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 10.0 权限动态申请需要遵循以下步骤: 1. 添加权限AndroidManifest.xml 文件中 在你的应用的 AndroidManifest.xml 文件中添加所需的权限。例如,如果你的应用需要访问设备的存储空间,则需要添加以下权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 2. 检查权限是否已经被授予 在应用中检查权限是否已经被授予。可以使用以下代码: ```java private boolean checkPermission(String permission) { int result = ContextCompat.checkSelfPermission(this, permission); return result == PackageManager.PERMISSION_GRANTED; } ``` 3. 请求权限 如果权限没有被授予,则需要请求权限。可以使用以下代码: ```java private void requestPermission(String permission, int requestCode) { ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode); } ``` 4. 处理权限请求结果 当用户响应权限请求时,系统将调用 onRequestPermissionsResult() 方法。在该方法中,你需要检查用户是否授予了权限。如果用户授予权限,则你可以执行所需的操作。如果用户拒绝了权限,则你需要提供一些解释或提示,以便用户重新请求权限。可以使用以下代码: ```java @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限被授予,执行所需的操作 } else { // 权限被拒绝,提供解释或提示 } return; } } } ``` 上面的例子中,MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE 是请求码,用于识别该权限请求。可以在请求权限时为其指定一个值。 需要注意的是,在 Android 10.0 中,一些权限需要使用新的权限模型,如存储权限。你需要使用新的 API 来请求这些权限。例如,如果你的应用需要访问设备的存储空间,则需要使用以下代码请求权限: ```java private void requestStoragePermission() { boolean useLegacyStorage = !Environment.isExternalStorageLegacy(); if (useLegacyStorage) { requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_CODE); } else { Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(Uri.parse("package:" + getPackageName())); startActivityForResult(intent, REQUEST_CODE); } } ``` 在上面的代码中,Environment.isExternalStorageLegacy() 用于检查设备是否支持新的存储权限模型。如果设备支持新的模型,则需要打开存储权限设置页面,让用户手动授予权限。如果设备不支持新的模型,则可以使用旧的权限模型来请求权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值