BBC BASIC
Development >> Android >> Accessing an Android public directory
http://bbcbasic.conforums.com/index.cgi?board=android&action=display&num=1452812980

Accessing an Android public directory
Post by Richard Russell on Jan 14th, 2016, 10:09pm

Windows provides a number of 'special folders', the paths to which can be discovered by calling the FNspecialfolder() function listed in the BB4W documentation. In a similar way Android provides a number of 'public directories'; I have listed below a function for returning their paths:

Code:
      DEF FN_AndroidPublicDirectory(dir$)      LOCAL path$, path%, clazz%, env%, fid%, mid%, field%, objcls%, object%, string%      SYS "SDL_AndroidGetJNIEnv" TO env%      SYS !(!env%+24),  env%, "android/os/Environment" TO clazz% : REM FindClass      SYS !(!env%+576), env%, clazz%, dir$, "Ljava/lang/String;" TO fid% : REM GetStaticFieldID      IF fid% = 0 SYS !(!env%+92),  env%, clazz% : = ""      SYS !(!env%+580), env%, clazz%, fid% TO field% : REM GetStaticObjectField      SYS !(!env%+452), env%, clazz%, "getExternalStoragePublicDirectory", \      \                 "(Ljava/lang/String;)Ljava/io/File;" TO mid% : REM GetStaticMethodID      SYS !(!env%+456), env%, clazz%, mid%, field% TO object% : REM CallStaticObjectMethod      SYS !(!env%+124), env%, object% TO objcls% : REM GetObjectClass      SYS !(!env%+132), env%, objcls%, "getAbsolutePath", \      \                 "()Ljava/lang/String;" TO mid% : REM GetMethodID      SYS !(!env%+136), env%, object%, mid% TO string% : REM CallObjectMethod      SYS !(!env%+676), env%, string%, 0 TO path% : REM GetStringUTFChars      path$ = $$path%      SYS !(!env%+680), env%, string%, path% : REM ReleaseStringUTFChars      SYS !(!env%+92),  env%, objcls% : REM DeleteLocalRef      SYS !(!env%+92),  env%, object% : REM DeleteLocalRef      SYS !(!env%+92),  env%, field%  : REM DeleteLocalRef      SYS !(!env%+92),  env%, clazz%  : REM DeleteLocalRef      = path$ 

The parameter that is passed to this function may be "DIRECTORY_ALARMS", "DIRECTORY_DCIM", "DIRECTORY_DOCUMENTS", "DIRECTORY_DOWNLOADS", "DIRECTORY_MOVIES", "DIRECTORY_MUSIC", "DIRECTORY_NOTIFICATIONS", "DIRECTORY_PICTURES", "DIRECTORY_PODCASTS" or "DIRECTORY_RINGTONES".

The function also serves as an illustration of how accessing the Android OS tends to be more complicated than the equivalent in Windows. This is largely because the API is Java-based rather than the C/C++ API used by Windows.

Richard.