French Fichier invisible avant redemarrage smartPhone

Mathias24

Member
Licensed User
Bonjour,

J'ai un soft qui crée un fichier texte dans le DirDefaultExternal et écrit dedans.
Tout fonctionne bien mais si je recherche le fameux fichier avec l'explorateur du PC (raccorder via USB/Transfert de fichier), le fichier est introuvable ou n'est pas à jour. Il faut que j'éteigne le smartPhone et que je le rallume pour voir le fichier ou sa dernière version.

Je pense que le fichier reste en cache (ram), ce qui n'est pas bête, ça évite d'user la flash, et qu'il n'est flashé que si l'OS manque de place dans le cache ou qu'on arrête le SmartPhone.

Mais comment faire pour forcer son écriture en flash pour le voir de suite avec le PC ?
J'ai bien essayer des flush ou des close, mais rien n'y fait.
J'ai essayé sur plusieurs devices, c'est le même phénomène.
Y aurait-il une solution ?
 

klaus

Expert
Licensed User
Longtime User
J'ai en souvenir qu'il y a un moyen pour réactualiser l'affichage dans l'explorateur Windows, mais je ne me rapelle plus comment.
Un moyen que j'ai utilisé était de débrancher et rebrancher la fiche USB.
Je sais que ce n'est pas ce que tu cherches, j'ai essayé de retouver l'information sur le forum, mais sans succès.
 

drgottjr

Expert
Licensed User
Longtime User
voice le fameux moyen:
B4X:
Sub ScanFiles(files() As String)
    Dim r As Reflector
    r.RunStaticMethod("android.media.MediaScannerConnection", "scanFile", _
      Array As Object(r.GetContext, files, Null, Null), _
      Array As String("android.content.Context", "[Ljava.lang.String;", "[Ljava.lang.String;", _
         "android.media.MediaScannerConnection$OnScanCompletedListener"))
End Sub
n'est-ce pas, klaus?
 

Mathias24

Member
Licensed User
Pour réactualiser l'explorateur Windows (et autres pages web...) , c'est F5
Mais cela n'a pas d'effet. Ni de débrancher/rebrancher le câble USB.
Ca ne vient pas du PC, c'est pourquoi je pense au cache d'Android.
 

klaus

Expert
Licensed User
Longtime User
voice le fameux moyen:
Je ne me rappelle pas si c'était ça. Il y a bien quelque temps que je n'ai plus cherché à accéder à un fichier lors du développement.

Actuellement il y a aussi le problème que Android n'autorise plus l'accès direct à DirDefaultExternal dans les dernières versions.
Il est conseillé d'utiliser RuntimePermissions.GetSafeDirDefaultExternal qui est un répertoire externe dédié à l'application.
 

drgottjr

Expert
Licensed User
Longtime User
D'après M. Erel "The file is written. It is only Windows Explorer that doesn't show it..."
dans https://www.b4x.com/android/forum/t...ibrary-functionality.23801/page-2#post-137933

dans ce post se trouve le sub mentionné ci-dessus. je l'utilize tous les jours à fin de voir les photos sur mon PC que je viens de faire (à l'instant) avec ma portable, photos qui ne semblaient pas éxister mais que étaient bien là. C'est le moyen d'actualiser la portable. Question permis d'accès étant peut-être autre histoire.
 

Mathias24

Member
Licensed User
Bon ben je ne sais pas du tout ce que fait cette routine mais ca marche.
Il ne faut pas oublier d'inclure la bibliothèque Reflexion
et dans les noms de fichier, il faut qu'il y ait tout le path, ex :

Dim rp As RuntimePermissions
Dim nomDuPath As String

nomDuPath = rp.GetSafeDirDefaultExternal("") 'Ca c est pour obtenir les droits d ecriture

Après, on peut créer/ecrire/lire... un fichier (ex test.txt)

Ensuite, lors de la fermeture du soft :

Sub Activity_Pause (UserClosed As Boolean)
Dim nom(1) As String
outFile.Flush
nom(0)=nomDuPath & "/" & "test.txt"
ScanFiles(nom)
If UserClosed Then outFile.Close
End Sub

Et miracle, ca marche (faut quand meme debrancher le cable USB) sans devoir eteindre et rallumer le device
 
Top