Italian Kiosk mode - come fare?

amorosik

Expert
Licensed User
Ogni tanto ritorna la necessita' di realizzare qualcosa su smartphone o tablet e bloccare todos de todos a parte l'avviamento in automatico della nostra applicazione
Vedo che ci sono gia' alcune indicazioni, ma magari e' saltato fuori qualcosa di nuovo
Qualche novita' ?
Voi come fareste ?
 

Lello1964

Well-Known Member
Licensed User
Longtime User
io uso queste due modalità :

modalità kiosk:
Sub setKiosk(on As Boolean)
    Dim Command, Runner As String
    Dim StdOut, StdErr As StringBuilder
    Dim Result As Int
    Dim Ph As Phone
    StdOut.Initialize
    StdErr.Initialize
    Runner = File.Combine(File.DirInternalCache, "runner")
    Command = File.Combine(File.DirInternalCache, "command")
    File.WriteString(File.DirInternalCache, "runner", "su < " & Command)
    If on Then
        File.WriteString(File.DirInternalCache, "command", "dpm set-device-owner cloud.pagamico.boot/anywheresoftware.b4a.objects.AdminReceiver2" & CRLF & "exit") 'Any commands via crlf, and exit at end
    Else
        File.WriteString(File.DirInternalCache, "command", "dpm set-device-owner com.android.launcher3/anywheresoftware.b4a.objects.AdminReceiver2" & CRLF & "exit") 'Any commands via crlf, and exit at end
    End If
    Result = Ph.Shell("sh", Array As String(Runner), StdOut, StdErr)
End Sub

Sub setKiosk2(on As Boolean)
    Private p As Phone
    Private Out, Err As StringBuilder
    
    Out.Initialize
    Err.Initialize
    
    If on Then
        File.WriteString(File.DirRootExternal, "reboot.sh", "dpm set-device-owner cloud.pagamico.boot/anywheresoftware.b4a.objects.AdminReceiver2")
    Else
        File.WriteString(File.DirRootExternal, "reboot.sh", "pm clear cloud.pagamico.boot")
    End If
    
    p.Shell("sh", Array As String(File.Combine(File.DirRootExternal, "reboot.sh")), Out, Err)
    
    Log(Err)
End Sub

Private Sub btn_SetKiosk_Click
    setKiosk(True)
    setKiosk2(True)
End Sub

Private Sub btn_SetKioskOff_Click
    setKiosk(False)    
    setKiosk2(False)    
End Sub
 

Xfood

Expert
Licensed User
ciao @Lello1964 ottima soluzione,
un chiarimento, quindi dipende dal dispositivo, vedi conoscrere il nome del launcer "samsung, Datalogic, ecc.?
File.WriteString(File.DirInternalCache, "command", "dpm set-device-owner com.android.launcher3/anywheresoftware.b4a.objects.AdminReceiver2" & CRLF & "exit") 'Any
altra cosa , quindi nessun servizio, nessun ricevitore?
 

giannimaione

Well-Known Member
Licensed User
Longtime User
io uso queste due modalità :
ciao Lello,
hai modo di commentare il tutto e specialmente questo
B4X:
If on Then
        File.WriteString(File.DirRootExternal, "reboot.sh", "dpm set-device-owner cloud.pagamico.boot/anywheresoftware.b4a.objects.AdminReceiver2")
    Else
        File.WriteString(File.DirRootExternal, "reboot.sh", "pm clear cloud.pagamico.boot")
    End If
    
    p.Shell("sh", Array As String(File.Combine(File.DirRootExternal, "reboot.sh")), Out, Err)
 

Lello1964

Well-Known Member
Licensed User
Longtime User
ciao,

questa è una funzione che uso per far partire direttamente la app di boot in fase di riavvio, non è fondamentale, avrei dovuto eliminarla.
 

amorosik

Expert
Licensed User

Porta pazienza ma non ho capito, questo codice lo fai partire da dentro la tua app?
Ma prima di farla partire e' tutto libero, e quindi il device non entra in modalita' kiosk gia' quando lo avvii, e' cosi o sbaglio?
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Questo è un lavoro di un paio di anni fa, francamente non ricordo tutti i passaggi.
Ho rivisto il tutto, per attivare la funzione devi inviare al dispositivo questo comando via ADB :
adb shell dpm set-device-owner cloud.pagamico.boot/anywheresoftware.b4a.objects.AdminReceiver2, ovvimanete cloud.pagamico.boot è la app a cui deve tornare.

Attenzione che il comando non è reversibile, devi riformattare per tornare al normale, almeno io non sono riuscito a cambiarlo.

Io lo uso su dispositivi industriali.

Non so se funziona su smartphone
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Ho guardato la app di boot, c'è questo nel mainifest :

manifest:
AddApplicationText(<receiver android:name="anywheresoftware.b4a.objects.AdminReceiver2"
  android:permission="android.permission.BIND_DEVICE_ADMIN">
  <meta-data android:name="android.app.device_admin"
  android:resource="@xml/device_admin" />
  <intent-filter>
  <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
  </intent-filter>
</receiver>)
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…