Italian Inserire un file pdf per essere visualizzato

toro1950

Active Member
Licensed User
Buongiorno, sono in fase finale nello sviluppo della mia app, vorrei inserire un file pdf, praticamente un piccolo manuale
per le spiegazione dell'app. Praticamente so come visualizzarlo, l'ho già fatto nella mia prima app, in quell'app il file veniva
caricato al momento dal mio sito Web, in questa invece il file deve già esistere nella cartella File.DirInternal.
Come fare? tempo fà avevo letto che bisognava inserire il file in una cartella e da qui copiarlo nella cartella File.DirInternal.
Purtroppo non ricordo la cartella e come copiarlo
 

toro1950

Active Member
Licensed User
Ho ritrovato il codice
File.copy(File.DirAssets,"manuale.pdf", File.DirInternal ,"manuale.pdf") ma non so quale sia la cartella DirAssets
cioè dove posizionare il file nella cartella del progetto
 

toro1950

Active Member
Licensed User
Sono ruiscito a copiare il file inserendolo nella cartella Files, purtroppo non riesco a visualizzarlo, sulla vecchia app avevo questo codice che funzionava

B4X:
Sub label6_Click
    Dim fl As String
        fl="manuale.pdf"
    If File.Exists(File.DirInternal, fl) Then
        ' Msgbox("esiste","ok") il file esiste
        Dim FileToSend As String = fl
        File.Copy(File.DirInternal, FileToSend, Provider.SharedFolder, FileToSend)
        Dim in As Intent
        in.Initialize(in.ACTION_VIEW, Provider.GetFileUri(FileToSend))
        in.SetType("application/pdf")
        in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
        in.SetComponent("android/com.android.internal.app.ResolverActivity")
        StartActivity(in)
    End If
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Prova così (senza copiare da Assets a Internal):
B4X:
Sub Process_Globals
    Private xui As XUI

    Private mFileProvider As FileProvider
    Private mPDF_FileName As String = "NomeDelTuoFile.pdf"
End Sub

Sub Activity_Create(FirstTime As Boolean) ' Se il progetto è di tipo B4XPages, avrai B4XPage_Created anziché Activity_Create
    Activity.LoadLayout("Layout")

    mFileProvider.Initialize
End Sub

Sub Button1_Click
    File.copy(File.DirAssets, mPDF_FileName, mFileProvider.SharedFolder, mPDF_FileName)
    Dim Intent1 As Intent
    Intent1.Initialize(Intent1.ACTION_VIEW, mFileProvider.GetFileUri(mPDF_FileName))
    Intent1.SetType("application/pdf")
    Intent1.Flags = 1
    StartActivity(Intent1)
End Sub

E' importante aggiungere il codice seguente al file Manifest:
B4X:
AddManifestText(<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18" />
)

AddApplicationText(
  <provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="$PACKAGE$.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths"/>
  </provider>
)
CreateResource(xml, provider_paths,
   <files-path name="name" path="shared" />
)
 

toro1950

Active Member
Licensed User
Grazie, sempre puntuale e preciso, ho solo inserito il codice al file manifest
e funzion bene, penso di lasciarlo cosi senza apportare modifiche, ho ricomtrollato il vecchio progetto ed anche qui c'era
il codice nel file manifest
 

toro1950

Active Member
Licensed User
o mi consigli di apportare quelle poche modifiche e utilizzare il tuo codice, nel log trovo l'avviso che il file manuale.pdf nella cartella files non è stato aggiunto nel tab files, che significa?
 

LucaMs

Expert
Licensed User
Longtime User
o mi consigli di apportare quelle poche modifiche e utilizzare il tuo codice
Beh, col mio non avrai una copia nella DirInternal, quindi risparmio di spazio in memoria, ma visto che il tuo funziona, lascia pure così, anche perché non credo che il pdf sia molto grande, no?!

nel log trovo l'avviso che il file manuale.pdf nella cartella files non è stato aggiunto nel tab files, che significa?
Significa che sta nella cartella fisica Files di progetto ma non è elencato, visualizzato nel Tab Files. Premi il tasto "Sync".
 
Top