Android Question File.DirRootExternal become not work

Status
Not open for further replies.

Adamdam

Active Member
Licensed User
Longtime User
Dear Alls;

From very long time, I use File.DirRootExternal without any problem.
Now, I try to compile one of my project with same compile version but not work. It is abnormal.
Even some function work like:
File.Exists(File.DirRootExternal ,"abc.sqlite") = True work will
while
SQL1.Initialize(File.DirRootExternal ,"abc.sqlite",True) not work and even not create file if i delete previous file.

What happened with the compiler to make DirRootExternal not work

note:
I Added the following permissions in the Manifest file, but still DirRootExternal not work
AddPermission("android.permission.ACCESS_FINE_LOCATION")
AddPermission("android.permission.READ_PHONE_STATE")
AddPermission("android.permission.WRITE_EXTERNAL_STORAGE")
AddPermission("android.permission.READ_EXTERNAL_STORAGE")

Please i hope to find, first what happened with the project ?
and how can I solve to make DirRootExternal work right again with all function (like SQL.Ini...)

Thanks in advance,
Best regards
 
Dear Mr. Jeffrey

Really many thanks for your interest.

I try with "GetSafeDirDefaultExternal" as in the link you sent

It access the following link :
" /storage/emulated/0/Android/data/com.test.ext.dir/files " where com.test.ext.dir is the project package name,

But I need to access root directory i.e. /storage/emulated/0/

I need to make two different application access same directory/files but in the above result the two applications will access different directly based on its package name

note: if you create two different application to run on same mobile, them must take two different package names.

Hope for find solution to access the main root of mobile i.e. /storage/emulated/0/

best regards
 
Upvote 0
FWIW I just tried this and it seemed to work ok. Phone is running Android 7.0, B4A is 9.00, targetSdkVersion is 26 (ie unchanged default)
Code:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")

    Dim PermissionsGoodFlag As Boolean = True
 
    If PermissionsGoodFlag Then
        rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE)
        Wait For Activity_PermissionResult (Permission As String, YaeOrNay As Boolean)
        If YaeOrNay = False Then
            PermissionsGoodFlag = False
        End If
    End If
 
    If PermissionsGoodFlag Then
        rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
        Wait For Activity_PermissionResult (Permission As String, YaeOrNay As Boolean)
        If YaeOrNay = False Then
            PermissionsGoodFlag = False
        End If
    End If
 
    Log("PermissionsGoodFlag = " & PermissionsGoodFlag)
 
    If PermissionsGoodFlag Then
        File.WriteString(File.DirRootExternal, "1.txt", "This is the file in the root external directory")
    
        File.MakeDir(File.DirRootExternal, "khab")
        Dim KhabDir As String = File.DirRootExternal & "/khab"
        File.WriteString(KhabDir, "2.txt", "This is the file in Khab's directory")
        
        Dim D As String = File.DirRootExternal
        Log("Dir = " & D)    
        Log("ReadString = " & File.ReadString(D, "1.txt"))
    
        Dim D As String = KhabDir
        Log("Dir = " & D)
        Log("ReadString = " & File.ReadString(D, "2.txt"))
    End If
        
End Sub
Project, Manifest Editor has two lines added at bottom:
Code:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="26"/>
<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.DarkTheme)
'End of default text.
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)
AddPermission(android.permission.READ_EXTERNAL_STORAGE)
Log is:
Code:
Logger connected to:  TCL 5009A
--------- beginning of main
*** Service (starter) Create ***
--------- beginning of system
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
sending message to waiting queue (activity_permissionresult)
running waiting messages (1)
** Activity (main) Resume **
PermissionsGoodFlag = true
Dir = /storage/emulated/0
ReadString = This is the file in the root external directory
Dir = /storage/emulated/0/khab
ReadString = This is the file in Khab's directory
** Activity (main) Pause, UserClosed = false **
Tools, B4A Bridge, File Explorer is:

upload_2019-7-10_12-57-20.png


(don't worry about the [1]'s in the file window title bars - that's just Windows letting you know that I did the procedure twice, to be sure, to be sure... ;-)
 
Upvote 0
Dear Mr. emexes

Really many thanks, it run with your code and support, thanks for you.
And thanks for all replies for my question.

best regards
 
Upvote 0
it run with your code
I had two gut reactions to this:

1/ what?!?! did you have doubt that it would ?!?!?!
2/ phew! (because, with computers being computers and Android being Android, it so easily might not have)

:)

ps thanks for the feedback confirming it worked - that'll give hope to other people who read this thread in the future when they are trying to solve the same or similar issue
 
Upvote 0
Status
Not open for further replies.
Back
Top