Android Question RuntimePermissions not prompting

Shivito1

Active Member
Licensed User
My app was fine but recently needed to target SDK 26 and now my app is not working on new devices.
Code: Copy
Sub Process_Globals
   'Get permission to write file
   Private rp As RuntimePermissions
End Sub
Sub Activity_Create(FirstTime As Boolean)
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
 
I don't see how we can help you with the information you provided. Sorry.
The error listed below tells me i don't have permission to write/read from the file location. After searching I found I need to use RuntimePermissions in order to fix this error. However I must be doing something wrong because when I debug I still get Permission denied. Also I am never prompted to give permission.
My Code:
Code: Copy
Sub Activity_Create(FirstTime As Boolean)
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
    infocheck1.Initialize("")
    If File.Exists(File.DirRootExternal &"/extractsrt/", "infocheck.txt") == False Then
        File.WriteString(File.DirRootExternal &"/extractsrt/", "infocheck.txt","0")
        
    else if File.Exists(File.DirRootExternal &"/extractsrt/", "infocheck.txt") == True Then
        Log(File.ReadList(File.DirRootExternal &"/extractsrt/", "infocheck.txt"))
    End If

Error:
Code: Copy
Error occurred on line: 685 (Main)
java.io.FileNotFoundException: /storage/emulated/0/extractsrt/infocheck.txt (Permission denied)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:200)
    at java.io.FileInputStream.<init>(FileInputStream.java:150)
    at anywheresoftware.b4a.objects.streams.File.OpenInput(File.java:209)
    at anywheresoftware.b4a.objects.streams.File.ReadList(File.java:233)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:710)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:339)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:249)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:134)
    at com.subreader.main.afterFirstLayout(main.java:102)
    at com.subreader.main.access$000(main.java:17)
    at com.subreader.main$WaitForLayout.run(main.java:80)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6960)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
 
Upvote 0
Use the event sub then. Make sure to not use any file access from a path you don´t have access too till you get permission.
 
Upvote 0
Use the event sub

Code: Copy
Sub Process_Globals
   'Get permission to write file
   Private rp As RuntimePermissions
End Sub
Sub Activity_Create(FirstTime As Boolean)
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
End Sub

'Event sub example
Sub Activity_PermissionResult (Permission As String, Result As Boolean)
  
    Select Case Permission
        Case rp.PERMISSION_WRITE_EXTERNAL_STORAGE
            If Result = True Then
                infocheck1.Initialize("")
                If File.Exists(File.DirRootExternal &"/extractsrt/", "infocheck.txt") == False Then
                    File.WriteString(File.DirRootExternal &"/extractsrt/", "infocheck.txt","0")
    
                else if File.Exists(File.DirRootExternal &"/extractsrt/", "infocheck.txt") == True Then
                    Log(File.ReadList(File.DirRootExternal &"/extractsrt/", "infocheck.txt"))
                End If
            Else
                ToastMessageShow("You have not permission to write external storage", True) 
            End If
        End If
    End Select
End Sub
 
Last edited:
Upvote 0
Thanks all!
I got it to ask but only if i debug and step through the code if I don't it finishes the Activity Create sub before getting permission. I'm currently trying to re write my code so that activity create can finish before the write/read is needed but I'm not having much luck.

Is there a way to prompt for permission before it finishes the Activity_Create sub?
 
Last edited:
Upvote 0
Awesome I got it XD
Feels like a hack job but its working now.

So in my Activity_Create I needed the permission. My workaround was to use (Try Catch) along with a variable. then when the result of the permission request is checked the variable lets the program know if it needs to re run activity_create(True)

in any case. Thank you all very very much!
 
Upvote 0

Similar Threads

Back
Top