French writte/Read file permission

Fillmore

Member
Licensed User
Longtime User
Bonjour à tous,

Je galère avec les permissions de lecture/écriture de fichiers (target 26).
J'ai parcouru les forums, mais je n'y arrive pas.

Quelqu'un peut m'aider ?

Merci !

FM
 

klaus

Expert
Licensed User
Longtime User

Fillmore

Member
Licensed User
Longtime User
Bonjour Klaus,

J'ai lu et essayé, mais je n'y arrive pas. J'ai réussi à autoriser la cam pour flasher les qrcodes. Mais la lecture écriture, non.

Je ne sais pas ce que je dois rajouter en terme de code.

Je vais potasser, mais cette histoire me met bien dans le jus...

Merci pour ta réponse en tout cas.

FM
 

Fillmore

Member
Licensed User
Longtime User
Qu'est-ce qui ne fonctionne pas ? Lorsque je veux lire ou enregistrer, l'appli se ferme. Le deboger m'indique "PERMISION DENIED"
Quel code utilises-tu ? c'est là le problème je ne sait pas ce qu'il faut que j'insère et où. J'ai modifié le manifest, mais je ne comprends pas bien :" Use RuntimePermissions.GetSafeDirDefaultExternal("") instead of File.DirDefaultExternal. The parameter passed is an optional subfolder that will be created under the default folder."
Est-ce que tu obtiens des messages d'erreur ? A part dans le deboger, non.
Où veux tu enregistrer ? tabsvg.SaveTableToCSV(File.DirRootExternal,"/qrco/Courses/temp.csv")
Que veux-tu faire avec les fichiers ? sauvegarder les données d'une course d'orientation et pouvoir les relire ensuite.

J'espère avoir répondu comme il faut.

Merci bien !

FM
 

klaus

Expert
Licensed User
Longtime User
Si tu veux relire les fichiers qu'avec ton application tu peux utiliser File.DirInternal, ce dossier n'est accessible par aucune autre application.
Si tu supprimes le programme ce dossier est aussi supprimé.
Si tu veux que les fichiers soient accessibles par d'autres applications, tu peux utiliser RuntimePermissions.GetSafeDirDefaultExternal("") sans autre permission.
J'ai joint un petit programme test, qui écrit et relir des données.
Ce fichier est accessible avec l'explorateur de fichier de WIndoes sur le PC avec l'appareil connecté avec un câble USB, sous Phone\Android\data\b4a.FileFolderTest\files.
upload_2018-6-4_16-27-59.png


J'ai essayé d'y accéder par un autre programme depuis l'appareil en utilisant le nom de dossier donné par RuntimePermissions.GetSafeDirDefaultExternal("").
"/storage/emulated/0/Android/data/b4a.FileFolderTest/files" dans mon cas, et ça fonctionne.
b4a.FileFolderTest étant le nom de l'application entrée dans Build Configuration.
upload_2018-6-4_16-31-50.png
 

Attachments

  • FileFolderTest.zip
    9.2 KB · Views: 311

Fillmore

Member
Licensed User
Longtime User
Super, merci.

J'ai en effet besoin d'accéder au répertoire en cas d'export des resultats.
Je regarde tout ça ce soir.

Encore merci.

FM
 

Fillmore

Member
Licensed User
Longtime User
Bonjour Klaus,

En cherchant un peu, j'ai trouvé cette solution : https://www.b4x.com/android/forum/threads/denied-permission-sdk-23.69226/#post-439306

L'exemple que j'ai chargé fonctionne parfaitement.

J'ai essayé de l'intégrer à mon code, mais impossible d'intégrer la Sub Activity_PermissionResult (Permission As String, Result As Boolean)

Elle n'est pas reconnue comme une routine... Alors que si je l'intègre à un projet vierge, ça ne pose aucun problème.

Je préférerais écrire à la racine du stockage pour que les utilisateurs puissent retrouver les fichiers créés plus facilement. Sinon, je ferai comme tu m'a dit au moins pour l'instant.

je mets la partie incriminée, mais pas certain que ça aide beaucoup...
J'ai essayé de l'insérer à plusieurs endroits, mais rien n'y fait. Je dois faire quelque chose de travers...

Mais bon, à moins que la solution ne te saute aux yeux, ne t’embête pas trop avec ça.

Merci et bonne journée.

FM


B4X:
Private Sub SetTheme (Theme As Int)
    If Theme = 0 Then
        ToastMessageShow("Theme not available.", False)
        Return
    End If
    If Theme = Theme_Value Then Return
    Theme_Value = Theme
    Activity.Finish
    StartActivity(Me)
End Sub

Sub Activity_PermissionResult (Permission As String, Result As Boolean)

  If Permission = rp.PERMISSION_WRITE_EXTERNAL_STORAGE Then
        sdcardEnabled = False
        Log("You NOW can write to File.DirRootExternal")       
         File.WriteString(File.DirRootExternal, "/QRCO/String.txt", _
        "This is some string" & CRLF & "and this is another one.")
  End If

end sub
 

klaus

Expert
Licensed User
Longtime User
Ci-joint le project avec la 'runtime permission'.
As-tu ajouté le code ci-dessous dans le Manifest Editor?
B4X:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />)
Ainsi que rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)dans Activity_Create?
 

Fillmore

Member
Licensed User
Longtime User
J'ai trouvé...

La sub existait déjà pour le GPS...
Alors, j'ai honte...

Merci encore pour ton aide !

Fred
 

Fillmore

Member
Licensed User
Longtime User
Par contre le play store me dit ça :

Déclarations d'autorisation android.permission.WRITE_EXTERNAL_STORAGE en double avec des paramètres maxSdkVersions différents.

Ca vient surement de ce que j'ai ajouté au manifest...

Je peux l'enlever ?

Merci.

Fred
 

Fillmore

Member
Licensed User
Longtime User
J'ai ça :


B4X:
'AddManifestText(
'<uses-permission
'  android:name="android.permission.WRITE_EXTERNAL_STORAGE"
'  android:maxSdkVersion="18" />
')

AddManifestText(
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="26"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false" />)
AddManifestText(<uses-feature android:name="android.hardware.camera" android:required="false" />)
AddManifestText(<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />)
AddManifestText(<uses-feature android:name="android.hardware.camera.flash" android:required="false" />)
'AddPermission("android.permission.ACCESS_COARSE_LOCATION")
AddPermission("android.permission.INTERNET")
AddPermission("android.permission.ACCESS_FINE_LOCATION")
AddPermission("android.permission.WAKE_LOCK")
AddPermission("android.permission.DEVICE_POWER")
'AddPermission("android.permission.ACCESS_COARSE_UPDATES")
AddPermission("android.permission.READ_PHONE_STATE")
AddPermission("android.permission.VIBRATE")
AddPermission("android.permission.CAMERA")
AddPermission("android.permission.FLASHLIGHT")
AddPermission("android.hardware.camera")
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
 

Fillmore

Member
Licensed User
Longtime User
Oui, bien sur.
Je l'ai commenté pour pouvoir déployer ma version (car urgence), ce qui a fonctionné (l'appli fonctionne aussi très bien).
Mais qu'est-ce que je risque à ne pas le mettre ?

Merci.

Fred
 
Top