前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >B4A 安卓开发(VB语言)储存权限申请(三大类型权限)

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

作者头像
一线编程
发布2021-08-18 18:05:15
1.6K3
发布2021-08-18 18:05:15
举报
文章被收录于专栏:办公魔盒办公魔盒

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
复制
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
复制
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
复制
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
复制
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
复制
#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
复制
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
复制
链接:https://pan.baidu.com/s/1CvD_RbkgkTDQxJDxFhPFVw 
提取码:vbee 
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-26,如有侵权请联系?cloudcommunity@tencent.com 删除

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

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • B4A 安卓开发(VB语言)储存权限申请(三大类型权限)
    • Android 的权限大致分为三种:
      • 那么在B4A中如何是申请适应不同版本的API的储存权限呢?
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com