在B4A中请求权限分两部分:
1、在manifest中添加相应的权限请求。
通过 AddPermission(XXXXXX) 添加相应权限
普通权限如网络权限,加到这一步就ok了,一些有风险的权限还需要第二步
2、程序中动态请求由用户授权
Sub Button1_Click
'点击按钮获取授权
Private rp As RuntimePermissions '需要添加自带的同名库文件
rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult (permission As String, Result As Boolean)
If Result = False Then
Log("No permission!")
Return
End If
'下面是授权后的代码
End Sub
ok,迎来了第一个执行错误
可以看得出来,这个错误是因为用到了 androidx/core/content/ContextCompat 这个类
我的手机系统版本是华为鸿蒙2.0 、模拟器系统版本是安卓12
B4A的默认包中没有支持 androidx.core 的,需要我们自己下载,于是从gradle的缓存中Copy了一份 androidx.core-1.3.0.aar 放入B4A安装目录下面的 Libraries 文件夹中,再次编译,再次报编译错误。
从截图中可以看到 很多 m2repository\com\android\support 的字样,于是我用压缩软件打开 androidx.core-1.3.0.aar 的包,查看发现,里面真的有 android.support.v4 这个包组,于是猜测可能和B4A自带的包组冲突,于是删掉了 androidx.core-1.3.0.aar 中的 android 目录 ,仅保留 androidx。
再次编译迎来的期盼的权限申请界面。
B4A 重新编译的时候记得要先清除项目
只要是类库发生变化,必须清除,否则会报错
最后提醒下,android 10 以后不用想要获取设备信息了,google禁止三方应用获取该权限,无限报错了😂
PERMISSION_READ_PHONE_STATE 废了