Italian Problemi con l'inizializzazione della fotocamera

Walter Scafati

Active Member
Licensed User
Longtime User
Buongiorno, sto realizzando una applicazione che si collega ad un server esterno per per la lettura di ordini di lavorazione e documenti allegati (pdf, jpg, png, doc ecc) e per l'invio di foto, scattate con lo smartphone o prese dalla galleria.
Le funzioni utilizzate nella app sono:
  • Appupdating all'avvio per verifica aggiornamenti
  • gestione della cartella della App con:
Private rp As RuntimePermissions
shared = rp.GetSafeDirDefaultExternal("")
  • utilizzo di un Dim Chooser As ContentChooser per l'accesso alla galleria
  • utilizzo di Public Provider As FileProvider per la visualizzazione dei file allegati tramite viewer esterni alla app
Tutte queste funzioni lavorano egregiamente ma quando vado ad inizializzare la fotocamera mi torna il seguente errore:

java.lang.reflect.InvocationTargetException

Se installo l'esempio, trovato sul forum relativo alla fotocamera questo funziona bene, ma nella mia app mi da errore.
Ho allora portato tutto il mio codice all'interno della app di esempio ed in questo caso funziona. Se però modifico il nome della app nel "Configura ambiente di compilazione" l'inizializzazione della fotocamera torna il errore alla riga evidenziata.
Mi viene da pensare che ci sia un problema di privilegi sulla cartella creata per la App.
Mi potete aiutare che ci sto diventando matto?
Grazie!

inizializzazione Fotocamera:
Public Sub Initialize (PanelCamera As Panel, FrontCamera As Boolean, TargetModule As Object, EventName As String)
    target = TargetModule
    event = EventName
    Front = FrontCamera
    Dim id As Int
    id = FindCamera(Front).id
    If id = -1 Then
        Front = Not(Front) 'try different camera
        id = FindCamera(Front).id
        If id = -1 Then
            ToastMessageShow("No camera found.", True)
            Return
        End If
    End If
    cam.Initialize2(PanelCamera, "camera", id)
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
Hai richiesto i permessi?
 

Walter Scafati

Active Member
Licensed User
Longtime User
A naso è il parametro TargetModule; cosa gli passi?

[Qual'è l'esempio sul quale ti sei basato?]
Camera-1 con la classe CameraExClass

B4X:
Private Sub InitializeCamera
    camEx.Initialize(panelCamera, frontCamera, Me, "fotocamera")
    frontCamera = camEx.Front
End Sub

dove in Globals ho:

B4X:
    Private PanelCam As Panel
    Private panelCamera As Panel
    Private camEx As CameraExClass
    Private ImageView1 As ImageView

mentre in process_globals:
B4X:
Private frontCamera As Boolean = False
 

Walter Scafati

Active Member
Licensed User
Longtime User
Nel frattempo ho scoperto che se nel manifest metto:
B4X:
AddManifestText(
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="21"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)

funziona, ma se metto android:targetSdkVersion = "23" o superiore la fotocamera va in errore!
 

LucaMs

Expert
Licensed User
Longtime User
Nel frattempo ho scoperto che se nel manifest metto:
B4X:
AddManifestText(
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="21"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)

funziona, ma se metto android:targetSdkVersion = "23" o superiore la fotocamera va in errore!
Allora è probabile che abbia ragione @Star-Dust, questione di permessi.
Fai click sul Tab Log (in basso a destra) e poi sul tasto "List permissions". Tra quelli elencati, quelli segnati con un asterisco sono obbligatori.


Camera-1 con la classe CameraExClass
Il link al thread?
 

LucaMs

Expert
Licensed User
Longtime User
Perdonami! Non ricordavo da dove lo avevo preso
In quel progetto c'è:
B4X:
Private Sub InitializeCamera
    Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA)
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    If Result Then
        camEx.Initialize(Panel1, frontCamera, Me, "Camera1")
        frontCamera = camEx.Front
    Else
        ToastMessageShow("No permission!!!", True)
    End If
End Sub
(nota che ha dichiarato rp nello Starter ma non è obbligatorio).
Se il tuo è un progetto B4XPages (te lo auguro ?) cambia Activity_PermissioResult in B4XPage_PermissionResult.
 

Walter Scafati

Active Member
Licensed User
Longtime User
In quel progetto c'è:
B4X:
Private Sub InitializeCamera
    Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA)
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    If Result Then
        camEx.Initialize(Panel1, frontCamera, Me, "Camera1")
        frontCamera = camEx.Front
    Else
        ToastMessageShow("No permission!!!", True)
    End If
End Sub
(nota che ha dichiarato rp nello Starter ma non è obbligatorio).
Se il tuo è un progetto B4XPages (te lo auguro ?) cambia Activity_PermissioResult in B4XPage_PermissionResult.
No, nel mio c'è
B4X:
Private Sub InitializeCamera
    camEx.Initialize(Panel1, frontCamera, Me, "Camera1")
    frontCamera = camEx.Front
End Sub
 

Walter Scafati

Active Member
Licensed User
Longtime User
Se metto il tuo lnitializeCamera non funziona, il panel che ospita la fotocamera diventa tutto bianco e la fotocamera non si inizializza.

Ti allego il progetto example che ho io.
 

Walter Scafati

Active Member
Licensed User
Longtime User
Sei sicuro di aver usato la classe di quel thread di cui ho messo il link?


Google Drive?

Cmq, basterebbe che tu pubblicassi la sola Activity Main (dato che suppongo che tu non abbia creato un progetto B4XPages, giusto?)
In effetti la class che avevo io era in versione 1.1 mentre quella del thread è 1.3.
Ora su uno smartphone con android 6 va bene mentre su uno con android 11 si è generato un problema con la libreria httpUtils2:

Error: java.net.UnknownServiceException: CLEARTEXT communication to 51.xx.xx.xx not permitted by network security policy error in httputils2
 
Top