Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >B4A 安卓开发(VB语言)储存权限申请(三大类型权限)

B4A 安卓开发(VB语言)储存权限申请(三大类型权限)

作者头像
办公魔盒
发布于 2021-08-18 10:05:15
发布于 2021-08-18 10:05:15
1.9K34
代码可运行
举报
文章被收录于专栏:办公魔盒办公魔盒
运行总次数:4
代码可运行

B4A 安卓开发(VB语言)储存权限申请(三大类型权限)

作者:VB小源码 微信:vbee_club 转载请注明出处

危险权限申请图示:

特殊权限申请图示:

Android 的权限大致分为三种:
  • 普通权限:只需要在清单编辑器Manifest Editor中添加即可
  • 危险权限:需要在B4A代码中使用RuntimePermissions动态申请,以Dialog 弹窗形式进行请求
  • 特殊权限:需要在代码中动态申请,以系统 Activity 的形式进行请求

而我们今天要讲的主题,是关于存储权限,在 Android 6.0 之后就变成了危险权限,而到了 Android 11 上面变成了特殊权限,而最明显的区别是一个是通过 Dialog 展示给用户看,另外一个是通过 Activity 展现给用户看。

那么在B4A中如何是申请适应不同版本的API的储存权限呢?
  • 1、普通权限:在Android 6.0之前(含Android 6.0),即API<=23之前,直接在Manifest Editor 编辑器里面添加相应的权限清单即可:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AddManifestText(
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="29"/>
<supports-screens android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)

''添加储存权限
AddPermission(android.permission.READ_EXTERNAL_STORAGE) ''读取储存
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)  ''写入储存
  • 2、危险权限:在Android 7.0到Android 10.0,即 29>API>23 之前,除了要在Manifest Editor 编辑器里面添加相应的权限清单外,还需要在 Activity 代码页添加Dialog权限动态申请

清单代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AddManifestText(
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="29"/>
<supports-screens android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)

''添加储存权限
AddPermission(android.permission.READ_EXTERNAL_STORAGE) ''读取储存
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)  ''写入储存

Activity代码

引用RuntimePermissions类库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub Process_Globals
    Private rp As RuntimePermissions  ''动态申请权限
End Sub

Sub Activity_Create(FirstTime As Boolean)

    rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE) ''动态申请储存读取权限
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) ''动态申请储存写入权限

End Sub

''注意需要添加权限申请返回事件,否则报错闪退
Sub Activity_PermissionResult (Permission As String, Result As Boolean)
    Log(Permission)
End Sub
  • 3、特殊权限:在Android 10.0以上,即 API>=29 之前,除了要在Manifest Editor 编辑器里面添加相应的权限清单外,还需要在 Activity 代码页添加Dialog权限动态申请,还需要添加 Activity 权限申请代码

清单代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AddManifestText(
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="29"/>
<supports-screens android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)

''添加权限
AddPermission(android.permission.READ_EXTERNAL_STORAGE) ''读取储存
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)  ''写入储存

''api>=29
AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE) ''特殊权限
SetApplicationAttribute(android:requestLegacyExternalStorage, true) 

Activity代码清单

1.引用RuntimePermissions类库

2.引用JavaObject类库

3.引用Phone类库

  • 新建标准类库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#Event: StorageAvailable
Sub Class_Globals
    Private ion As Object
    Private mCallback As Object
    Private mEventName As String

End Sub

Public Sub Initialize (Callback As Object, EventName As String)
    mCallback = Callback
    mEventName = EventName
End Sub

Public Sub HasPermission As Boolean
    Dim has As Boolean
    Dim jo As JavaObject
    jo.InitializeStatic("android.os.Environment")
    has = jo.RunMethod("isExternalStorageManager", Null)
    Return has
End Sub

Public Sub GetPermission
    If HasPermission Then
        RaiseEvent
        Return
    End If
    Dim in As Intent 
    in.Initialize("android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION", "package:" & Application.PackageName)
    StartActivityForResult(in)
End Sub

Private Sub RaiseEvent
    CallSubDelayed(mCallback, mEventName & "_StorageAvailable")
End Sub

Private Sub ion_Event (MethodName As String, Args() As Object) As Object
    RaiseEvent
    Return Null
End Sub

Private Sub StartActivityForResult(i As Intent)
    Dim jo As JavaObject = GetBA
    ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
    jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub

Private Sub GetBA As Object
    Dim jo As JavaObject = Me
    Return jo.RunMethod("getBA", Null)
End Sub

Activity代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub Process_Globals
    Private xui As XUI
    Private rp As RuntimePermissions
    Dim Phone As Phone
    Dim AP As ActivityPermission
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")

    ''申请特殊权限
    If FirstTime Then
        AP.Initialize(Me, "AP")
    End If
    Dim SdkVersion As Int = Phone.SdkVersion
    If SdkVersion < 30 Then
        Dim rp As RuntimePermissions
        rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) 
        Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    Else
        If Not(AP.HasPermission) Then
            MsgboxAsync("应用即将申请访问所有文件,是否允许?", "文件访问")
            Wait For Msgbox_Result(Res As Int)
            AP.GetPermission
            Wait For MES_StorageAvailable
        End If
    End If

    ''权限申请
    rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE)
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)


End Sub

Sub Activity_PermissionResult (Permission As String, Result As Boolean)
    Log(Permission)
End Sub

好了今天就介绍到这里了


实例下载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
链接:https://pan.baidu.com/s/1CvD_RbkgkTDQxJDxFhPFVw 
提取码:vbee 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 办公魔盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
3 条评论
热度
最新
Hello, I am Raphael from Switzerland. I tried your solution for authorization in B4A. I just have one problem. In your code, you use ActivityPermission Library. I don't find this library. How can find it ? I try to download with your link, but Baidu doesn't work in Europe... Any solution ?
Hello, I am Raphael from Switzerland. I tried your solution for authorization in B4A. I just have one problem. In your code, you use ActivityPermission Library. I don't find this library. How can find it ? I try to download with your link, but Baidu doesn't work in Europe... Any solution ?
22点赞举报
You can log in to the official website of b4a and get the class library in the b4x forum
You can log in to the official website of b4a and get the class library in the b4x forum
回复回复点赞举报
website: https://www.b4x.com/
website: https://www.b4x.com/
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Android二维码功能实现,在程序内嵌入ZXing项目
最近二维码真是越来越火了,随便电视上、网络上、商场里,到处都是二维码。而内嵌二维码扫描功能的软件也越来越多,QQ、微信、UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功
用户1158055
2018/01/05
1.1K0
Android二维码功能实现,在程序内嵌入ZXing项目
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )
首先 , 判定权限是否已经通过 , 如果没有通过再进行申请 ; 如果下面函数返回值为 PackageManager.PERMISSION_GRANTED , 说明权限申请通过 ; 如果返回值为 PackageManager.PERMISSION_DENIED , 说明权限没有被授予 ;
韩曙亮
2023/03/29
2.7K0
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )
第一个PhoneGap(cordova)应用
PhoneGap是一套能让你使用HTML5轻松调用本地API接口和发布应用到商店的应用开发平台。官方说有低成本,低开发周期,轻量化等优点,这些咱暂时也没法证明,略过不表。但是有一条跨平台,却是很明显的优势。因为它采用HTML5+JavaScript的模式来开发应用。PhoneGap用JavaScript统一封装了几大平台的本地api(Andriod,IOS,WP8/7,WINRT)等等。。这样的话从一个平台移植到另外一个平台只需要把HTML代码跟JS原封不动的拿过去,打包一下就可以了。PhoneGap后来被Adobe收购,然后又贡献给了开源社区,现在由Apache管理,改名cordova。
MJ.Zhou
2022/05/07
4880
第一个PhoneGap(cordova)应用
VR开发--Cardboard制作VR播放器
首先,今天有了一个想法。所以我决定制作一个VR播放器。纯手工打造,24K金不敢说,100%真心。
孙寅
2020/06/02
2.3K0
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )
权限判定 : 首先要判定是否已经授权指定的权限数组 ; 调用 EasyPermissions.hasPermissions 方法 , 进行判定 ;
韩曙亮
2023/03/28
2.5K0
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )
[VB开发安卓]B4A 二维码,条形码,PDF417码识别和创建,界面仿微信早期版本扫一扫
[VB开发安卓]B4A类库 二维码,条形码,PDF417码识别和创建,界面仿微信早期版本扫一扫 B4A类库特点 1. 界面仿微信早期版本扫一扫 2.采用最新的谷歌ZXing 3.5.1版本核心识别库 3.双击扫码界面,可以打开闪光灯,辅助识别 4.集成,二维码,条形码,PDF417码的识别和创建 ---- 示例代码: #Region Project Attributes #ApplicationLabel: OhhZxing扫码示例 #VersionCode: 1 #VersionName:
办公魔盒
2023/03/02
1.6K0
[VB开发安卓]B4A 二维码,条形码,PDF417码识别和创建,界面仿微信早期版本扫一扫
Unity 和 Android 的工程集成
有时候,我们需要在 Unity 里调用一些 Android 的功能,这些功能在 Unity 中可能并没有提供接口,需要在 Android 平台上实现。此时,我们需要有一个方法来让 Android 代码和 Unity 代码互调用。这里记录一下操作方法,并提供一个工具来简化两个工程之间的集成流程。
zhiruili
2023/10/20
7470
Unity 和 Android 的工程集成
Arcgis andoid开发之应用百度地图接口实现精准定位与显示
怀着激动、兴奋的心情,在这个漫天柳絮的季节写下了这片博文,为什么呢,因为困扰我很久的一个技术性的问题得到了解决,发次博文,供大家参观、学习,同时,也以慰藉我长期困扰的心情,好了,废话不再,言归正传,看看这到底是个什么东西?
牛老师讲GIS
2018/10/23
7430
Arcgis andoid开发之应用百度地图接口实现精准定位与显示
Android6.0动态权限适配&XMPermissions
从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。它还让用户可以对应用的功能进行更多控制;例如,用户可以选择为相机应用提供相机访问权限,而不提供设备位置的访问权限。用户可以随时进入应用的“Settings”屏幕调用权限。摘自Android官网:在运行时请求权限。
静默加载
2020/05/29
1.4K0
Android开发(九) Android Manifest.xml 结构详解
本文源自: http://blog.csdn.net/ithomer/article/details/8138409
Java架构师必看
2021/05/27
1.5K0
【Unity游戏开发】Android6.0以上的动态权限申请问题
  最近公司的游戏在做安全性测试,期间也暴露出了不少安全上的问题。虽然我们今天要说的权限申请和安全性相关不大,但是也会影响到游戏的使用体验等,所以本篇博客中马三就想和大家谈谈Android6.0以上版本中的动态权限申请的一些事情。
马三小伙儿
2019/05/20
2.8K0
Android M (API23) 中对权限的授权处理
Android M的发布,最重要的提升就是权限的控制,这么多年来Android App的权限滥用状况将逐步得到改善。
GitOPEN
2019/01/29
1.9K0
Android M (API23) 中对权限的授权处理
【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )
上一篇博客 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 ) 简要介绍了 图片文件压缩格式 , 以及 Android 提供的图片质量 , 尺寸压缩 API , 本博客中使用该 API 进行图片压缩 ;
韩曙亮
2023/03/27
8340
【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )
游戏优化系列一:海外谷歌应用适配相关
大家好,我叫Jack冯; 本人20年硕士毕业于广东工业大学,于2020年6月加入37手游安卓团队;目前主要负责海外游戏发行安卓相关开发。
37手游安卓团队
2020/12/02
10.9K0
游戏优化系列一:海外谷歌应用适配相关
APK安装流程详解1——有关"安装ing"的实体类概述
该类包含了从AndroidManifest.xml文件中收集的所有信息。 PackageInfo.java源码地址 通过源码我们知道PackageInfo是实现Parcelable接口,所以它可以在进程间传递
隔壁老李头
2018/08/30
1.7K0
APK安装流程详解1——有关"安装ing"的实体类概述
.net core 从(本地)服务器获取APK文件并解析APK信息
注:此段代码解析APK时,若APK包含中文会极其的卡顿,建议上传前先用Npinyin重命名再次上传,至于原因已提交GitHub,暂未得到回复,所以先自己重命名再上传吧
GoodTime
2023/10/31
6000
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )
上一篇博客 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 ) 是权限申请的详细用法 , 针对用户 拒绝 , 永久拒绝 权限申请操作都有对应的处理方案 , 如果只是简单的使用 , 只调用 EasyPermissions.requestPermissions 方法即可 ;
韩曙亮
2023/03/28
2.5K0
【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )
在 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 ) 博客中 , 进行了文件拷贝简单操作 ;
韩曙亮
2023/03/29
4640
【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )
推荐阅读
Android二维码功能实现,在程序内嵌入ZXing项目
1.1K0
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )
2.7K0
第一个PhoneGap(cordova)应用
4880
VR开发--Cardboard制作VR播放器
2.3K0
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )
2.5K0
[VB开发安卓]B4A 二维码,条形码,PDF417码识别和创建,界面仿微信早期版本扫一扫
1.6K0
Unity 和 Android 的工程集成
7470
Arcgis andoid开发之应用百度地图接口实现精准定位与显示
7430
Android6.0动态权限适配&XMPermissions
1.4K0
Android开发(九) Android Manifest.xml 结构详解
1.5K0
【Unity游戏开发】Android6.0以上的动态权限申请问题
2.8K0
Android M (API23) 中对权限的授权处理
1.9K0
【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )
8340
游戏优化系列一:海外谷歌应用适配相关
10.9K0
APK安装流程详解1——有关"安装ing"的实体类概述
1.7K0
.net core 从(本地)服务器获取APK文件并解析APK信息
6000
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )
2.5K0
【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )
4640
相关推荐
Android二维码功能实现,在程序内嵌入ZXing项目
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验