Italian [Risolto] [B4A] Mail con Provider: errore

Aldo's

Active Member
Licensed User
Buongiorno a tutti
Vi spiego quello che ho fatto:
1) in Main - Process_Global ho dichiarato:
B4X:
    Public DBDir As String=File.DirInternal
    Public DBFile As String="nomefile.est"

2) ho aggiunto la libreria FileProvider
3) nella Sub Class_Global ho messo
B4X:
    Private Provider As FileProvider

4) nella Sub B4XPage_Created ho messo
B4X:
    Provider.Initialize

5) il codice in cui provo a mandare la mail è il seguente:
B4X:
Private Sub ImageView1_Click
    Dim Mail As String = "[email protected]"
    Dim NuovaDir As String = Provider.SharedFolder
    File.Copy(Main.DBDir,Main.DBFile,NuovaDir,Main.DBFile)
    Dim email As Email
    Dim subject As String = "Invio file"
    email.To.Add(Mail)
    email.Subject = subject
    email.Body = "Invio automatico del file db"
    email.Attachments.Add(Provider.GetFileUri("nomefile.est"))
    StartActivity(email.GetIntent)
End Sub

Quando lancio la procedura di invio mail mi restituisce il seguente errore:
Error occurred on line: 34 (FileProvider)
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:132)
at b4a.example.fileprovider._getfileuri(fileprovider.java:123)
at b4a.example.b4xmainpage._imageview1_click(b4xmainpage.java:601)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
at android.view.View.performClick(View.java:8160)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30236)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8653)
at java.lang.reflect.Method.invoke(Native Method)

Come ne esco?
Grazie
 

Aldo's

Active Member
Licensed User
Chiedo scusa a tutti, ho risolto aggiungendo al Manifest questo:
B4X:
AddManifestText(<uses-permission
   android:name="android.permission.WRITE_EXTERNAL_STORAGE"
   android:maxSdkVersion="30" />
)

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" />
)
 

Star-Dust

Expert
Licensed User
Longtime User
Chiedo scusa a tutti, ho risolto aggiungendo al Manifest questo:
Visto che ti scusi, ti ringrazio.
vale per la prossima volta
 

Aldo's

Active Member
Licensed User
Chiedo scusa di aver chiesto scusa ma...
...non funziona.
O meglio, non mi da più l'errore, ma mi scrive che "Non è stato possibile allegare il file".
Cosa devo fare?
 

Aldo's

Active Member
Licensed User
Forse dovrebbe essere così:
B4X:
    email.Attachments.Add(Provider.GetFileUri("nomefile.est"))
    Dim in As Intent = email.GetIntent
    in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    StartActivity(in)
Ho già corretto in questa maniera, e ancora mi da errore.
Ho letto anche il post che mi hai suggerito ed è da quello che ho risolto il primo errore.
Temo che il problema possa essere la directory di partenza del provider.sharedfolder che è file.dirinternal, ma in un'altra app mi funziona senza problema...ma questa è solo una sensazione.
 

Aldo's

Active Member
Licensed User
Stesso errore, giusto?
No non mi da errore, ma non mi allega il file e mi da il messaggio (nel programma della Posta) "Impossibile allegare il file".
 

Aldo's

Active Member
Licensed User
Perché non hai scritto:
email.Attachments.Add(Provider.GetFileUri(Main.DBFile))
?
Funziona, e funziona anche se metto "nomefile.est" sia sopra dove copio in SharedFolder che sotto nella GetFileUri...in poche parole vuole la stessa indicazione.
 
Top