e questo non può essere; l'unica cosa è che potrebbe non essere sufficiente la memoria a disposizione, ma senza conoscere i messaggi d'errore...!perchè nella dir internal non salva il jpg
1) se non è indispensabile che salvi sulla root, salva sulla internal che è molto meglio;La mia app è stata aggiornata con i permessi di root, io vi parlo di un problema che già nasceva con dal samsung s3 in poi, in pratica se scelgo di salvare il file sulla dirrootexternal l'app si chiude, mentre con altri dispositivi non samsung non succede, sembra che samsung utilizza un'altro percorso diverso dagli altri dispositivi.
Sirjo66 usi File.dirrootexternal?anche io ho un sacco di Samsung (OS 4, 5, 6 e 7) e non ho mai avuto problemi
rp.CheckAndRequest ( rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult ( Permission As String, Result As Boolean)
If Result Then
Dim out As OutputStream
'Dim testfolder As String
'testfolder = rp.GetSafeDirDefaultExternal("ticket")
rp.GetSafeDirDefaultExternal(File.DirDefaultExternal)
out = File.OpenOutput(File.DirDefaultExternal, "ticket.jpg", False)
c.Bitmap.WriteToStream(out, 100, "JPEG")
out.Close
b = ResizeBitmap(LoadBitmap(File.DirDefaultExternal, "ticket.jpg"), 800, 500)
Else
End If
txtdate.Text=""
txtnumberfly.Text=""
txtclockgates.Text=""
txtseatnumber.Text=""
txtfrom.Text=""
txtto.Text=""
txtclok.Text=""
txtpassenger.Text=""
share.sharebinary ("file://" & File.DirDefaultExternal & "/" & "ticket.jpg", "image/jpg", "CONDIVIDI Boarding Pass con:", "Ti Piace Boarding Pass? Condividila con i tuoi amici")
Dim out As OutputStream
'Dim testfolder As String
'testfolder = rp.GetSafeDirDefaultExternal("ticket")
rp.GetSafeDirDefaultExternal(File.DirDefaultExternal)
Sub Save
Dim P As Phone
rp.CheckAndRequest ( rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult ( Permission As String, Result As Boolean)
If Result Then
Dim out As OutputStream
out = File.OpenOutput(File.DirDefaultExternal, "ticket.jpg", False)
c.Bitmap.WriteToStream(out, 100, "JPEG")
out.Close
b = ResizeBitmap(LoadBitmap(File.DirDefaultExternal, "ticket.jpg"), 800, 500)
If P.SdkVersion>=24 Then
Dim shared As String
shared = rp.GetSafeDirDefaultExternal("ticket")
File.Copy(File.DirDefaultExternal, "ticket.jpg",shared, "ticket.jpg")
Sleep(500)
share.sharebinary (CreateFileProviderUri(shared, "ticket.jpg"), "image/jpg", "CONDIVIDI Boarding Pass con:", "Ti Piace Boarding Pass? Condividila con i tuoi amici")
' IO CONDIVEDEREI COSI
' Dim in As Intent
' in.Initialize(in.ACTION_VIEW, CreateFileProviderUri(shared,"ticket.jpg"))
' in.SetType("image/jpeg")
' in.Flags = 1
' StartActivity(in)
Else
share.sharebinary ("file://" & File.DirDefaultExternal & "/" & "ticket.jpg", "image/jpg", "CONDIVIDI Boarding Pass con:", "Ti Piace Boarding Pass? Condividila con i tuoi amici")
End If
Else
ToastMessageShow("Sorry permission denied",False)
End If
End Sub
Sub CreateFileProviderUri (Dir As String, FileName As String) As Object
Dim FileProvider As JavaObject
Dim context As JavaObject
context.InitializeContext
'File.Copy(Dir, FileName, shared, FileName)
FileProvider.InitializeStatic("android.support.v4.content.FileProvider")
Dim f As JavaObject
f.InitializeNewInstance("java.io.File", Array(shared, FileName))
Return FileProvider.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f))
End Sub
ho solo cercato di correggere gli errori mantenendo il più possibile il codice originale di @fifiddu70Perdonami @fifiddu70, non ti offendere, mi sa che non hai capito un bel niente della condivisione dei file con SDK 24+
Questo pezzo non vuol dire niente e non fa niente
B4X:Dim out As OutputStream 'Dim testfolder As String 'testfolder = rp.GetSafeDirDefaultExternal("ticket") rp.GetSafeDirDefaultExternal(File.DirDefaultExternal)
Dopo che hai chiesto i permessi per leggere e scrivere nella RootExternal non vuol dire che puoi usare il link diretto per condividere il file.
Per condividere il file, devi creare, una cartella SHARED all'interno della tua App e renderla zona Salva (GetSafeDirDefaultExternal). Poi devi copiare il file creato nella zona Salva e renderla condivisibile con CreateFileProviderUri (che ho allegato)
Ottieni un link che puoi condividere..... Il codice andrebbe scritto così
B4X:Sub Save Dim P As Phone rp.CheckAndRequest ( rp.PERMISSION_WRITE_EXTERNAL_STORAGE) Wait For Activity_PermissionResult ( Permission As String, Result As Boolean) If Result Then Dim out As OutputStream out = File.OpenOutput(File.DirDefaultExternal, "ticket.jpg", False) c.Bitmap.WriteToStream(out, 100, "JPEG") out.Close b = ResizeBitmap(LoadBitmap(File.DirDefaultExternal, "ticket.jpg"), 800, 500) If P.SdkVersion>=24 Then Dim shared As String shared = rp.GetSafeDirDefaultExternal("ticket") File.Copy(File.DirDefaultExternal, "ticket.jpg",shared, "ticket.jpg") Sleep(500) share.sharebinary (CreateFileProviderUri(shared, "ticket.jpg"), "image/jpg", "CONDIVIDI Boarding Pass con:", "Ti Piace Boarding Pass? Condividila con i tuoi amici") ' IO CONDIVEDEREI COSI ' Dim in As Intent ' in.Initialize(in.ACTION_VIEW, CreateFileProviderUri(shared,"ticket.jpg")) ' in.SetType("image/jpeg") ' in.Flags = 1 ' StartActivity(in) Else share.sharebinary ("file://" & File.DirDefaultExternal & "/" & "ticket.jpg", "image/jpg", "CONDIVIDI Boarding Pass con:", "Ti Piace Boarding Pass? Condividila con i tuoi amici") End If Else ToastMessageShow("Sorry permission denied",False) End If End Sub Sub CreateFileProviderUri (Dir As String, FileName As String) As Object Dim FileProvider As JavaObject Dim context As JavaObject context.InitializeContext 'File.Copy(Dir, FileName, shared, FileName) FileProvider.InitializeStatic("android.support.v4.content.FileProvider") Dim f As JavaObject f.InitializeNewInstance("java.io.File", Array(shared, FileName)) Return FileProvider.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f)) End Sub
Ti ho riscritto il codice, spero che tu capisca di aver ricevuto un grosso aiuto.
Nel futuro prima di spingerti su nuovi orizzonti informatici a te sconosciuti, assicurati di aver studiato a dovere i tutorial.
Non puoi sperare fare cose serie e limitarti a fare lo sviluppatore hobbista, che copia e incolla pezzi di codice presi dal forum sperando che poi funzionino.
P.S. La Samsung ha tante colpe, ma questa volta la colpa è tua
mi sa che non hai capito un bel niente
Ripeto che, a meno che non sia necessario per motivi "particolari", è sempre meglio usare la DirInternal, sia perché non si ha la necessità di permessi, sia perché i file sono "più al sicuro".Però non andrei a modificare questo (visto che "studiare" i permessi è complicato e qundi anche spiegarlo)
out = File.OpenOutput(rp.GetSafeDirDefaultExternal(""), "ticket.jpg", False)
c.Bitmap.WriteToStream(out, 100, "JPEG")
out.Close
b = ResizeBitmap(LoadBitmap(rp.GetSafeDirDefaultExternal(""), "ticket.jpg"), 800, 500)
Dim CartellaExternal = rp.GetSafeDirDefaultExternal("") ' questo lo faccio all'inizio dell'app, una volta sola
....
....
out = File.OpenOutput(CartellaExternal, "ticket.jpg", False)
c.Bitmap.WriteToStream(out, 100, "JPEG")
out.Close
b = ResizeBitmap(LoadBitmap(CartellaExternal, "ticket.jpg"), 800, 500)
Grazie Sergio.La GetSafeDirDefaultExternal serve per avere accesso alla DirDefaultExternal senza dover chiedere nessun tipo di permesso, dato che è la cartella della stessa applicazione, praticamente come se tu accedessi alla DirInternal
E quindi, al posto della DirDefaultExternal basta che usi la GetSafeDirDefaultExternal
ad esempio:
B4X:out = File.OpenOutput(rp.GetSafeDirDefaultExternal(""), "ticket.jpg", False) c.Bitmap.WriteToStream(out, 100, "JPEG") out.Close b = ResizeBitmap(LoadBitmap(rp.GetSafeDirDefaultExternal(""), "ticket.jpg"), 800, 500)
come vedi al posto di DirDefaultExternal ho semplicemente usato rp.GetSafeDirDefaultExternal("")
se vuoi ottimizzare il codice puoi calcolarti una volta sola la GetSafeDirDefaultExternal e poi usarla nella tua app, io infatti faccio così:
B4X:Dim CartellaExternal = rp.GetSafeDirDefaultExternal("") ' questo lo faccio all'inizio dell'app, una volta sola .... .... out = File.OpenOutput(CartellaExternal, "ticket.jpg", False) c.Bitmap.WriteToStream(out, 100, "JPEG") out.Close b = ResizeBitmap(LoadBitmap(CartellaExternal, "ticket.jpg"), 800, 500)
Sergio
Il tuo codice è corretto ma non funzionerebbe credo su SDK inferiore a 24.La GetSafeDirDefaultExternal serve per avere accesso alla DirDefaultExternal senza dover chiedere nessun tipo di permesso, dato che è la cartella della stessa applicazione, praticamente come se tu accedessi alla DirInternal
E quindi, al posto della DirDefaultExternal basta che usi la GetSafeDirDefaultExternal
ad esempio:
B4X:out = File.OpenOutput(rp.GetSafeDirDefaultExternal(""), "ticket.jpg", False) c.Bitmap.WriteToStream(out, 100, "JPEG") out.Close b = ResizeBitmap(LoadBitmap(rp.GetSafeDirDefaultExternal(""), "ticket.jpg"), 800, 500)
come vedi al posto di DirDefaultExternal ho semplicemente usato rp.GetSafeDirDefaultExternal("")
se vuoi ottimizzare il codice puoi calcolarti una volta sola la GetSafeDirDefaultExternal e poi usarla nella tua app, io infatti faccio così:
B4X:Dim CartellaExternal = rp.GetSafeDirDefaultExternal("") ' questo lo faccio all'inizio dell'app, una volta sola .... .... out = File.OpenOutput(CartellaExternal, "ticket.jpg", False) c.Bitmap.WriteToStream(out, 100, "JPEG") out.Close b = ResizeBitmap(LoadBitmap(CartellaExternal, "ticket.jpg"), 800, 500)
Sergio
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?