Italian questi samsung non funzionano con la mia app

Discussion in 'Italian Forum' started by fifiddu70, Nov 17, 2018.

  1. fifiddu70

    fifiddu70 Well-Known Member Licensed User

    Qualcuno mi sa dire come salvare una immagine jpg negli smartphone samsung? con il metodo file.dirrootexternal da errore e crasha l'app, metre sul 80% degli altri dispositivi funziona, mi sapete dire una soluzione che funzioni su tutti e anche sui dispositivi samsung? ho necessità di salvare sulla rootexternal perchè nella dir internal non salva il jpg e nemmeno sulle altre di cui dirdefault external.
     
  2. LucaMs

    LucaMs Expert Licensed User

    Innanzitutto complimenti per il titolo; indica che sei una persona molto sicura di sé. Io avrei scritto: "La mia app non funziona con i Samsung", tu il contrario, sono i cattivoni Samsung a non far funzionare la tua app :)

    Dovresti riportare il messaggio d'errore mostrato quando l'app va in crash (in modalità debug, meglio). Probabilmente sarà una questione di permessi e quindi non dovrebbe dipendere dalla marca del dispositivo ma dalla loro versione di Android.

    Però non andrei a modificare questo (visto che "studiare" i permessi è complicato e qundi anche spiegarlo) ma...
    e questo non può essere; l'unica cosa è che potrebbe non essere sufficiente la memoria a disposizione, ma senza conoscere i messaggi d'errore...!

    Magari pubblica anche la parte di codice che effettua il salvataggio.

    [Tra l'altro, la DirRootExternal è a disposizione di tutte le app e dell'utente stesso, quindi i tuoi file non sarebbero al sicuro]
     
    Last edited: Nov 18, 2018
    Gottrik, sirjo66 and Filippo like this.
  3. Star-Dust

    Star-Dust Expert Licensed User

    Filippo likes this.
  4. fifiddu70

    fifiddu70 Well-Known Member Licensed User

    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.
     
  5. Star-Dust

    Star-Dust Expert Licensed User

    A me DirRootExternal funziona correttamente su tutti Samsung che ho. (S3,S6,Tab2,Tab3)

    Verofica se il problema è un altro
     
    Last edited: Nov 19, 2018
  6. LucaMs

    LucaMs Expert Licensed User

    1) se non è indispensabile che salvi sulla root, salva sulla internal che è molto meglio;
    2) avvia l'app in modalità debug, mettendo un breakpoint prima del salvataggio e verifica i valori dele variabili (path);
    3) posta il messaggio d'errore e magari il codice che esegue il salvataggio, altrimenti è inutile che chiedi aiuto, non potremmo dartelo.
     
    Gottrik likes this.
  7. sirjo66

    sirjo66 Well-Known Member Licensed User

    anche io ho un sacco di Samsung (OS 4, 5, 6 e 7) e non ho mai avuto problemi
     
    fifiddu70 likes this.
  8. fifiddu70

    fifiddu70 Well-Known Member Licensed User

    Purtroppo non ho qui con me un'altro samsung per fare la prova, ricordo una volta si parla che il percorso di salvatggio dei samsung è diverso, non c'è un modo per far si che in maniera automatica salvi su un percorso che sia creato con rootexternal? il file jpg lo salva solo impostando dirrootexternal nei telefoni funzionanti mentre nel samsung dava questo errore, alla fine è una mia app che crea un falso bilgietto aereo condividibile su facebook, per fare uno scherzo.
     
  9. fifiddu70

    fifiddu70 Well-Known Member Licensed User

    Sirjo66 usi File.dirrootexternal?
     
  10. LucaMs

    LucaMs Expert Licensed User

    A quanto pare non leggi o non leggi bene le risposte, quindi attaccati al tram :D
     
    Gottrik, sirjo66 and Filippo like this.
  11. sirjo66

    sirjo66 Well-Known Member Licensed User

    uso di tutto: DirInternal, DirRootExternal e anche File.DirDefaultExternal

    da un po' di tempo però, al posto di File.DirDefaultExternal uso GetSafeDirDefaultExternal

    comunque non hai risposto alla domanda che ti hanno fatto: hai fatto la gestione della richiesta dei permessi ?? Se non lo hai fatto è ovvio che non riesci a scrivere su DirRootExternal su sistemi operativi da 6.0 in poi
     
    Last edited: Nov 19, 2018
  12. Star-Dust

    Star-Dust Expert Licensed User

    A questo punto visto che devi condividere il file, non chiedere solo dei permessi.
    Per le versione di SDK23- basta che usi DirRootExternal,
    Ma devi usare il metodo di Share sicuro (SDK 24+) per la condivisione dei file con altre App.

    Ovviamente puoi escludere sicuramente DirInternal e DirDefaultExternal, la condivisione non funzionerebbe su nessuna versione di Android.
     
    Last edited: Nov 20, 2018
    sirjo66 and Filippo like this.
  13. fifiddu70

    fifiddu70 Well-Known Member Licensed User

    i permessi li chiedo:
    Code:
    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"), 800500)
                
                
    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")
    con questo codice riesco a salvare su tutti i dispositivi tranne samsung, sembra che non esiste il percorso dove salvare il file jpg
     
  14. Star-Dust

    Star-Dust Expert Licensed User

    Perdonami @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
    Code:
    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ì
    Code:
    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"), 800500)
      
            
    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 StringAs 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 :p
     
    Last edited: Nov 20, 2018
    Filippo, ellpopeb4a and sirjo66 like this.
  15. sirjo66

    sirjo66 Well-Known Member Licensed User

    confermo che il codice di fifiddu70 è sbagliato e quindi è normale non riuscire a scrivere il file, domani se ho un attimo di tempo vedo di correggerlo comunque ottimo il codice di star-dust
     
    Last edited: Nov 20, 2018
    Star-Dust likes this.
  16. Star-Dust

    Star-Dust Expert Licensed User

    ho solo cercato di correggere gli errori mantenendo il più possibile il codice originale di @fifiddu70
     
    sirjo66 likes this.
  17. LucaMs

    LucaMs Expert Licensed User

    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".

    Poi fate come ve pare :D
     
    Gottrik likes this.
  18. sirjo66

    sirjo66 Well-Known Member Licensed User

    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:
    Code:
    out = File.OpenOutput(rp.GetSafeDirDefaultExternal(""), "ticket.jpg"False)
    c.Bitmap.WriteToStream(out, 
    100"JPEG")
    out.Close
    b = ResizeBitmap(
    LoadBitmap(rp.GetSafeDirDefaultExternal(""), "ticket.jpg"), 800500)
    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ì:
    Code:
    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"), 800500)
    Sergio
     
    fifiddu70 and ellpopeb4a like this.
  19. fifiddu70

    fifiddu70 Well-Known Member Licensed User

    Grazie Sergio.
    appena ho due minuti lo devo provare, in questi due giorni sono impegnato ad un evento che mi cambia la vita, sto per trasferirmi per lavoro con tutta la famiglia da partanna - TP a San Giovanni la Punta - CT quindi spero per sabato essere nella nuova abitazione, nel frattempo sto preparando le cose da portare via.
    Ti faccio sapere come faccio tutto.
     
  20. Star-Dust

    Star-Dust Expert Licensed User

    Il tuo codice è corretto ma non funzionerebbe credo su SDK inferiore a 24.
    Mentre salvando anche su DirRootExternal permetti i device più vecchi (non samsung :p) di poter condividere l'immagine
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice