Fully Kiosk Browser is a secure and flexible Android Kiosk Browser and App Launcher. Restrict and adjust the functionality of your websites and lockdown other apps in Kiosk Mode. Fully Kiosk provides fullscreen mode, motion detection, remote admin and a lot of other features for your digital signages, interactive kiosk systems, information panels and all kinds of unattended Android TM devices. From just a fullscreen browser to full mobile device management (MDM) solution, you decide what you get. Device rooting is not required.
Fully Single App Kiosk is our app for the fast lockdown of the device to one selected app. Please get this kiosk app from Google Play or get an APK file from the download box.
Fully Video Kiosk is our app for playing video, image and websites shows on Android devices with full kiosk protection. Also available on Google Play and as APK file.
Fully Exam Kiosk is our app for device lockdown to the exam website during the online examination. Fully Exam Kiosk browser supports all learning management systems (LMS) that support Safe Exam Browser (SEB) including Moodle.
With Fully Cloud EMM you can organize, monitor and remote configure your Fully Kiosk devices from everywhere. You can also make fast Device Provisioning and manage apps with Enterprises.
The intent of most people setting up kiosk mode is to prevent the user from running anything other than the browser based content in the full screen browser window or running the selected apps. Fully Kiosk app will help you to run the selected websites or apps in the kiosk mode. Users will also be restricted from making changes to any device settings. On many devices the admin can even restrict the use of hardware keys like the volume, power and home buttons on the Android device in the Kiosk mode. Fully Kiosk locks a device to intended use while preventing personal use by employees or customers. You can use the Kiosk mode on smartphones, tablets and other Android devices.
Some good examples of using devices in Android Kiosk mode:
For many use cases the remote device management and monitoring (MDM) provided by Fully Cloud is very efficient way to maintain the devices and contents.
The most features of Fully Kiosk Browser are configurable according to your needs.
If you miss any features for your use case please don’t hesitate to ask us.
Please do not expect miracles in the quality of web presentation, the browser performance, or battery usage. Fully Kiosk uses the web engine of Android Webview. It can only show the web pages as well as the available Android Webview can. More Information in this FAQ.
Fully Kiosk apps run best with Android OS ver. 5 to 14. Android OS derivatives like Chrome OS, Android TV, Fire OS and Android Go Edition may have restricted feature set or have serious issues. For Android 12+ support check this FAQ. For Android 4.4 support check this FAQ.
APK files are available in the download box. When installing from APK file apps from unknown sources must be enabled in the Android security settings. If you have Google Play installed we recommend disabling auto-updates for Fully Kiosk apps. When updating from APK installation to Google Play the old app needs to be uninstalled. You can use the settings export/import in Other Settings in order to preserve the configuration.
If you have many devices to install check our provisioning and deployment manuals.
When installing Fully Kiosk the following permissions are implicitly granted:
When activating the Screen Off Timer, JavaScript Interface, Remote Admin or Scheduled Sleep time Device Administrator Permission is requested in order to lock the device and turn the screen off by Fully Kiosk app. The safe mode lock requires administrator permission in order to set the device PIN. The Device Administrator Permission must be disabled for Fully Kiosk before the app can be uninstalled.
In Android 5+ following runtime permissions are requested when the appropriate settings are activated:
In Android 6+ following runtime permissions are requested when the appropriate settings are activated or on demand:
In Android 7+ following runtime permissions is requested when the appropriate settings are activated:
In Android 8+ following runtime permissions is requested when the appropriate settings are activated:
Some vendors changed their Android in the way that some runtime permissions can’t be granted. You see a missing permissions list, press OK, but noting happens. Please continue pressing OK on subsequent requests. After 3-4 times an IGNORE button will appear (ver. 1.35+). You can let Fully Kiosk to forget the missing permissions. Some features relying on these permissions will however fail.
When enabling the Remote Admin or JavaScript Interface Fully Kiosk tries to obtain all potentially needed runtime permissions in order to avoid confirmation dialogs when changing settings later remotely or by using the JavaScript. There is also a solution for ignoring some permissions by configuration available, ask us for details.
The number of runtime permissions to confirm manually can be reduced to 4 or 5 when using the device provisioning. Those permissions unfortunately can’t be granted automatically in the Android OS.
In the Fully Kiosk app swipe from the left edge to the right to reach the menu and settings. If you have Gesture Navigation enabled (in Android 10+) you have to hold short at the left edge before swiping out the menu.
Web Content SettingsThese options only have effect when Fully Kiosk is in foreground. As other apps usually run fullscreen in Android OS it’s impossible to change this. For fullscreen options check this.
entryName=APN1;apnName=mbb.mobi-data.com;operatorNumeric=26006;protocol=2;roamingProtocol=2 entryName=APN2;apnName=mbb2.mobi-data.com;operatorNumeric=26006;protocol=2;roamingProtocol=2
Also supports optional apnTypeBitmask und carrierEnabled fields.
All settings can be also set from the Remote Admin or Fully Cloud EMM (except some like Kiosk Mode on/off) or via JavaScript and REST interfaces of Fully Kiosk. You can export/import the settings to/from a JSON file in the app (look in Other Settings) or in Remote Admin. You can push configuration or import JSON settings file to many device at once from Fully Cloud. You can also auto-import settings from file on the app start, look at Deployment chapter for details.
When updating installation from APK to Google Play or the other way the old app may need to be un-installed first. Please use settings export/import in order to keep the configuration.
Starting Fully Kiosk Browser 1.43 we encrypt PINs and passwords when exporting settings into a JSON file. Importing this JSON file in an older version of the app won’t work. If you really need to apply this settings file to an older app version please import the JSON file as a configuration in Fully Cloud first and then apply the configuration from Fully Cloud to the devices.
This menu feature creates a link to the currently open web page on the Android Home screen. So you can set a favorite/bookmark to any web page including the universal launcher. The title of web page is taken from the page title. Starting FKB 1.51 you can edit the title. Fully Kiosk tries to find the best available favicon to use as link icon for the current URL. You can put several links to various websites on the Home screen. Clicking such link opens Fully Kiosk with the web URL stored in the link.
Using Universal Launcher in Fully Kiosk you can select apps, websites and file links to add to the launcher page. Enable Show Launcher on Start option in order to show the launcher page whenever the Start URL is required. Otherwise you can show the launcher by calling the fully://launcher URL.
You can seamlessly mix all types of shortcuts on the Universal Launcher. The apps started by the launcher will be whitelisted in Kiosk Mode automatically. For websites please use the URL Whitelist/Blacklist options if you need some filtering.
You can customize the icon and name for each shortcut as well as the zoom factor, the text/background color, or set the background image. If you need advanced layout customizing please use the Inject HTML Code option.
When the Kiosk Mode is enabled the Fully Kiosk app will set up an Android Kiosk Mode with kiosk gesture and PIN protection. Usually you also want to disable the home button, the access to Android settings and other apps. For this purpose Fully Kiosk will ask you to set it as the default Home App (Launcher). Then by pressing the Home button the user remains locked in Fully Kiosk and won’t get to the default Android launcher.
You can easily turn the Kiosk Mode on or off in the Fully Kiosk settings. Then leave the settings and follow instructions in order to activate or deactivate the Kiosk Mode. Before the first start in Kiosk Mode some additional permissions are requested and should be granted.
Note that user input is required on the device to enable/disable the Kiosk Mode. For this reason changing the Kiosk Mode from Remote Admin or by remote import of a settings file is intentionally disabled. You can however enable the Kiosk Mode by auto-importing the settings file as described in our deployment guide. Enabling the Kiosk Mode without any user interaction is only possible by device provisioning. On provisioned devices you can even switch the Kiosk Mode on/off by Remote Admin (ver. 1.53+).
The system bars, the camera, the power button and the volume buttons can also be blocked in Kiosk Mode. However a very long press on the power button will still cause the most devices to switch off. In Android 8+ the status bar pull-down can’t be locked but Fully Kiosk will try to close the status bar immediately and it shouldn’t be usable. We recommend Device Provisioning for Android 8+ devices for better protection.
Android 12+ has some limitations that open gaps in the Kiosk Mode protection without device provisioning or other means. Read this FAQ for solutions.
Some devices or Android versions may fail with establishing the kiosk mode. We recommend all users who need to use the Android Kiosk Mode to test it thoroughly including rebooting device in Kiosk mode, entering PIN and switching Kiosk Mode completely off before deploying to production. If something goes wrong check this FAQ how to exit from Kiosk Mode.
If you need the users to access some parts of system settings you can define a special Wifi/Settings PIN and the users will get to Wifi or other settings when you enter this PIN. The restrictions for other apps apply while the Wifi or other Android settings are in foreground. On some devices after opening Wifi Settings users can change to other Android settings and escape from Kiosk Mode. As workaround you can try using the experimental Select Wifi Network option instead of opening Android Wifi Settings. Starting ver. 1.38 you can also block the main settings activity by providing a component name like com.android.settings/.Settings in the App Blacklist option.
Fully Kiosk can also lockdown other apps in Kiosk Mode. Read this FAQ for details and restrictions. You can even lockdown the device to a single app using the Single App Mode or by using our Fully Single App Kiosk app. Note that exiting from this mode REQUIRES 7 FAST TAPS!
If you make device provisioning (recommended!) you can also use the Lock Task Mode in Fully Kiosk for even better kiosk mode experience where home and recent app buttons are completely disabled.
The visual motion detection uses the front camera of the device. This feature is experimental. Some devices are known for their cameras do not start or stop after some time or become too hot when running. Motion detection will cause a high battery consumtion as the cam must be running permanently. Visual motion detection is not possible with Android Go devices running Android 10+.
The detection works pretty good with the Detector Sensitivity setting at 90-95 if there is enough light. With the Show Preview Cam option you will get a small cam preview in the lower right corner, so you can test the cam coverage.
When switching the visual motion detection for the first time additional runtime permissions will be required in Android 6+. Keep calm and enable everything.
The acoustic motion detection uses the microphone of the device and can work even in complete darkness very efficiently. Try around and set the appropriate sensitivity.
When motion is detected the screen can switched on. You can specify on Device Management section with Screen Off Timer setting in seconds how fast the screen has to be off again. Device Admin permission must be enabled for Fully in order to turn screen off. (This has nothing to do with Android root privileges. Root access is not required for Fully unless you want to use the Root Features.) Before the Fully app can be uninstalled, device admin permission must be disabled.
When motion is detected the screensaver can be stopped. Check the Screensaver Settings in Fully Kiosk to enable the screensaver.
You can manage your Fully Kiosk app remotely on devices in your local network or worldwide using VPN. If you have a PLUS license for your device this service is FREE of any charges.
Enable Remote Admin and specify a password in Fully Settings and connect in any web browser to http://ip-address-of-device:2323 You can make this connection HTTPS if you put a SSL certificate onto device (ver. 1.27+).
How to generate and put a self signed SSL certificate?You need OpenSSL 1.1.1 and some Linux knowledge to create a SSL certificate for the device. First create a root certificate (for signing other CAs) using a script like this:
#!/bin/bash mkdir CA openssl genrsa -aes256 -out CA/rootCA.key 4096 openssl req -x509 -new -nodes -key CA/rootCA.key -sha256 -days 3650 -out CA/rootCA.crt
Import the rootCA.crt as Trusted Root Authority in your web browser.
Now create a domain certificate fully-remote-admin-ca.p12 with password “fully” for each device using a script like this. Each device must be addressed in your local network by a hostname like device4711.network.my, not by the IP address.
#!/bin/bash if [ -z "$1" ] then echo "Please supply a domain to create a certificate for"; echo "Usage:" echo "$0 device4711.network.my" exit; fi openssl req -new -nodes -keyout domain.key -out domain.csr -days 3650 -subj "/C=DE/L=Some/O=Acme, Inc./CN=$1" openssl x509 -req -days 3650 -sha256 -in domain.csr -CA CA/rootCA.crt -CAkey CA/rootCA.key -CAcreateserial -out domain.crt -extensions v3_ca -extfile <( cat <<-EOF [ v3_ca ] subjectAltName = DNS:$1 EOF )
# NB: When using OpenSSL3 you have to add -legacy option to openssl pkcs12 commands openssl pkcs12 -export -out fully-remote-admin-ca.p12 -inkey domain.key -in domain.crt -passout pass:fully echo Generated self signed CA for $1 in fully-remote-admin-ca.p12 openssl pkcs12 -in fully-remote-admin-ca.p12 -nodes -passin pass:"fully" | openssl x509 -noout -text
Now copy fully-remote-admin-ca.p12 file onto device into /sdcard folder and restart Fully Kiosk. Remote Admin will now be available at the location like https://device4711.network.my:2323
This setup works at least with current Google Chrome on Windows 10 without any warnings. Using other clients may need a slightly different SSL setup.
Note: With Fully Cloud EMM you can connect to Remote Admin from everywhere on the Internet. But this is not included in your Fully PLUS License.
These features are available on the Remote Admin web interface:
With Fully Cloud EMM you can organize, monitor and remote configure your Fully Kiosk devices from everywhere. You can also make fast Device Provisioning and manage apps with Enterprises. So you can setup and maintain your Fully Managed Devices in a smart and easy way.
Fully Kiosk does not change anything in your network, no port forwarding or VPN is needed, even if your devices are in a local network behind NAT. You have to enable Remote Admin from Fully Cloud option and set the Remote Admin Password in the Fully Kiosk settings. Check the Fully Cloud HowTos for more info.
Fully Cloud EMM Features
Features | Feature set |
Secure login with two factor authentication | BASIC |
Add devices to your account by Device ID or by Volume License Key | BASIC |
View current device information | BASIC |
View device locations on Google Map | BASIC |
Create groups and arrange devices in groups | BASIC |
Rename devices to nice aliases | BASIC |
Create configurations and make fast device provisioning (different methods supported) | BASIC |
Create sub-accounts, grant full admin access or restricted access (device groups based) to sub-accounts | BASIC |
Log all account and device actions | BASIC |
Create Google Play Managed Enterprises and silently manage apps, managed configurations and app permissions on devices (required Google Account and Google Play connection) | EARLY ADOPTER |
Use all features from device’ Remote Admin from everywhere | ADVANCED |
Remote push a new configuration to device (also scheduled and auto-repeated) | ADVANCED |
Device monitoring: get an Email or Pushbullet alert (or request your URL) when the device gets disconnected from power supply or from the Internet, or if your device’ battery is low, or device is moving (anti-theft alert) | ADVANCED |
Send action commands to device for maintenance lock, screen on/off, restart, settings import, device lock/wipe/reboot, install APK file, load and unzip content from a ZIP file etc. (also scheduled and auto-repeated) | ADVANCED |
Mass device admin: Make actions on all selected devices at once, schedule actions, auto-repeat actions daily or weekly, queue actions for offline devices until they go online | ADVANCED |
Use Fully Cloud API to get device info and remote control Fully Kiosk device from your software (look in your Fully Cloud account >> Cloud Configuration for API Access Tokens and docs) | ADVANCED |
Fully Cloud EMM Conditions
BASIC | EARLY ADOPTER | ADVANCED |
1 Trial Month FREE | 1 Trial Month FREE | 1 Trial Month FREE |
After Trial Month: | ||
Fully PLUS License required | Fully PLUS License required | Fully PLUS License required |
No other fees | No other fees for devices added until January 2021 otherwise Fully Cloud Subscription required | Fully Cloud Subscription required |
The trial month starts for each device by adding this device to Fully Cloud. After the trial period a Fully Cloud Subscription is required for using Advanced Features. The subscription is max. 1.18 €/month per device incl. annual payment 15% discount, more discount for each additional device on the same subscription. Make a free account and use the fee calculator in Fully Cloud on the Subscriptions menu. For example, if you make a subscription with 100 devices and pay annually it’s only 0.95 €/month per device.
There are two ways to pay the subscription fee:
1. PayPal: The subscription fee is paid by auto-recurring PayPal subscription with 3 or 12 months period. You can cancel your cloud subscription anytime in your PayPal account. The subscription will remain active all the time paid and no fees will be refunded. The number of the devices on the subscription and the amount can’t be changed once the subscription has started. You can however add another subscription anytime.
2. Bank Transfer: If you have 20+ devices you can pay yearly by bank transfer to our German bank account or give us a written purchase order (subject of approval). We require all international bank transfers to us to be made with the OUR instruction (all fees are paid by you). Unlike the PayPal subscription you can topup this subscription anytime by 5+ devices and you will always get the best price for the whole amount of devices. Cancellation and reduction is possible only to the end of the paid year.
Consider adding some spare devices as every additional device on the subscription makes the price per device cheaper. There is however no refund for unused spare devices or unused trial time. Please test everything with your devices prior to starting a subscription. Fully Cloud Subscription is only available for commercial users (no consumer contracts).
In order to maintain security of our cloud systems we stopped supporting Android 4.4 devices by the End of 2021. Starting 2022 Android 4.4 devices are not able to communicate with Fully Cloud.
If you have Remote Admin enabled you can use its features as a simple REST API interface in order to control the device from your local network. The base URL address is always http://ip-address:2323. You can make this connection HTTPS as described in the Remote Admin section.
You have to specify the Remote Admin Password on the URL. Don’t forget to URLencode all query string parameters. You can add type=json to the query string in order to get a short JSON response.
Get Device Info// Get Device Info JSON /?cmd=getDeviceInfo&password=[pass]Web Browsing
// Load URL /?cmd=loadStartUrl&password=[pass] /?cmd=loadUrl&url=[url]&password=[pass] /?cmd=loadUrl&url=[url]&tab=[0..n]&focus=[true|false]&password=[pass] /?cmd=loadUrl&url=[url]&newtab=[true|false]&focus=[true|false]&password=[pass] // Manage Tabs /?cmd=focusTab&tab=[index]&password=[pass] /?cmd=closeTab&tab=[index]&password=[pass] /?cmd=refreshTab&password=[pass] (ver. 1.45+) // Remove Web Items /?cmd=clearCache&password=[pass] /?cmd=clearWebstorage&password=[pass] /?cmd=clearCookies&password=[pass] (ver. 1.28+)Screen on/off, Screensaver and Daydream
/?cmd=resetWebview&password=[pass] (ver. 1.55.3+)
// Screen on/off /?cmd=screenOn&password=[pass] /?cmd=screenOff&password=[pass] /?cmd=forceSleep&password=[pass] // Simulate Motion /?cmd=triggerMotion&password=[pass] // Fully Screensaver and Android Screen Saver (Daydream) /?cmd=startScreensaver&password=[pass] /?cmd=stopScreensaver&password=[pass] /?cmd=startDaydream&password=[pass] /?cmd=stopDaydream&password=[pass]Kiosk and App Management
// Unlock/lock kiosk mode /?cmd=lockKiosk&password=[pass] /?cmd=unlockKiosk&password=[pass] // Start other apps and bring Fully app to foreground/background /?cmd=startApplication&package=[pkg]&password=[pass] /?cmd=toForeground&password=[pass] /?cmd=toBackground&password=[pass] // Restart and exit Fully Kiosk /?cmd=restartApp&password=[pass] /?cmd=exitApp&password=[pass] /?cmd=killMyProcess&password=[pass] // Kill my app hard (ver. 1.55+) // Return to main view if any special view (PDF, Settings, Menu) is open /?cmd=popFragment&password=[pass] // Download and launch APK file, user input can be required for install // If app already installed in this version, APK install will be started only if forceInstall=true // These features are not available if you installed Fully Kiosk from Google Play /?cmd=loadApkFile&url=[url]&forceInstall=[true|false]&password=[pass] /?cmd=uninstallApp&package=[package]&password=[pass] // Get current APK installation status (JSON) /?cmd=getInstallApkState&password=[pass] // Kill background processes for package (Android 13 and older) /?cmd=killBackgroundProcesses&package=[package]&password=[pass]Get Stats, Screenshot and Camshot
// Clear app data (Android 9+, provisioned devices only)
//?cmd=clearAppData&package=[package]&password=[pass] // Lock/unlock device for maintenance /?cmd=enableLockedMode&password=[pass] /?cmd=disableLockedMode&password=[pass] // Show message in an overlay /?cmd=setOverlayMessage&text=[text]&password=[pass] // Rooted devices only /?cmd=shutdownDevice&password=[pass] /?cmd=runRootCommand&command=[command]&password=[pass] /?cmd=runSuCommand&command=[command]&password=[pass] // Rooted and provisioned devices only /?cmd=rebootDevice&password=[pass]
// Load full usage stats CSV file /?cmd=loadStatsCSV&password=[pass] // Get screenshot image (PNG) /?cmd=getScreenshot&password=[pass] // Get camshot image (requires Motion Detection) /?cmd=getCamshot&password=[pass]Use TTS and Multimedia
// Text to speech /?cmd=textToSpeech&text=[text]&password=[pass] /?cmd=textToSpeech&text=[text]&locale=[locale]&password=[pass] /?cmd=textToSpeech&text=[text]&locale=[locale]&engine=[engine]&password=[pass] /?cmd=textToSpeech&text=[text]&locale=[locale]&engine=[engine]&password=[pass]&queue=[0|1] // ver. 1.38+ /?cmd=stopTextToSpeech // ver. 1.38+ // Play sounds/video and change audio volumeManage Settings
// Audio Streams: 0 – Voice Call, 1 – System, 2 – Ring, 3 – Music, 4 – Alarm, 5 – Notification, 6 – Bluetooth, 8 – DTMF, 9 – TTS, 10 – Accessibility /?cmd=setAudioVolume&level=[0-100]&stream=[0-10]&password=[pass] /?cmd=playSound&url=[url]&loop=[true|false]&password=[pass]&stream=[0-10] /?cmd=stopSound&password=[pass] /?cmd=playVideo&password=[pass]&url=[url]&loop=[0|1]&showControls=[0|1]&exitOnTouch=[0|1]&exitOnCompletion=[0|1] /?cmd=stopVideo&password=[pass] // ver. 1.42+
// Change any of 300+ Fully settings, look in Remote Admin for keys // New values will be applied immediately /?cmd=setBooleanSetting&key=[key]&value=[true|false]&password=[pass] /?cmd=setStringSetting&key=[key]&value=[value]&password=[pass] // Get current setting values /?cmd=listSettings&type=json&password=[pass] // Import JSON settings file from URL or file /?cmd=importSettingsFile&url=[url]&password=[pass]File Management
// Download and upzip file from URL to /sdcard /?cmd=loadZipFile&url=[url]&password=[pass] // Download/delete local files /?cmd=deleteFile&filename=[filename]&password=[pass] /?cmd=downloadFile&filename=[filename]&password=[pass] /?cmd=deleteFolder&foldername=[foldername]&password=[pass] // ver. 1.42+
The JavaScript interface allows the website integration with device and Fully features. You need a web developer or some JavaScript/HTML skills to use this API.
Don’t forget to enable Advanced Web Settings >> Enable JavaScript Interface option when using the JavaScript interface. Enable this option only if you trust all websites loaded (use URL Whitelist!). This option is potentially insecure as any website can read ALL your local files, change the device settings etc.
Following JavaScript functions are implemented in Fully Kiosk Browser (including beta versions).
Get device infoString fully.getCurrentLocale() String fully.getIp4Address() String fully.getIp6Address() String fully.getHostname() String fully.getHostname6() String fully.getMacAddress() String fully.getMacAddressForInterface(String interface) String fully.getWifiSsid()
String fully.getWifiBssid() String fully.getWifiSignalLevel() String fully.getSerialNumber()
String fully.getSerialNumberDeviceOwner() String fully.getAndroidId() String fully.getDeviceId()
String fully.getDeviceName() String fully.getImei() String fully.getSimSerialNumber() float fully.getBatteryLevel() float fully.getScreenBrightness() int fully.getScreenOrientation() int fully.getDisplayWidth() int fully.getDisplayHeight() boolean fully.getScreenOn() boolean fully.isPlugged() boolean fully.isKeyboardVisible() boolean fully.isWifiEnabled()
boolean fully.isWifiConnected()
boolean fully.isNetworkConnected() boolean fully.isBluetoothEnabled()
boolean fully.isScreenRotationLocked() String fully.getFullyVersion() int fully.getFullyVersionCode() String fully.getWebviewVersion() String fully.getAndroidVersion() int fully.getAndroidSdk() String fully.getDeviceModel() // Get storage info long fully.getInternalStorageTotalSpace() long fully.getInternalStorageFreeSpace() long fully.getExternalStorageTotalSpace() long fully.getExternalStorageFreeSpace() // Get environment sensor info String fully.getSensorInfo() float fully.getSensorValue(int type) String fully.getSensorValues(int type)
// Get data usage (Android 6+)
long fully.getAllRxBytesMobile()
long fully.getAllTxBytesMobile()
long fully.getAllRxBytesWifi()
long fully.getAllTxBytesWifi()
Control device, show notification, send network data etc.
void fully.turnScreenOn() void fully.turnScreenOff() void fully.turnScreenOff(boolean keepAlive) void fully.forceSleep() void fully.showToast(String text) void fully.setScreenBrightness(float level) void fully.enableWifi() // In Android 10+ only with provisioned devices void fully.disableWifi() // In Android 10+ only with provisioned devices void fully.enableBluetooth() void fully.disableBluetooth() void fully.showKeyboard() void fully.hideKeyboard() void fully.openWifiSettings() void fully.openBluetoothSettings() void fully.vibrate(int millis) void fully.sendHexDataToTcpPort(String hexData, String host, int port) void fully.showNotification(String title, String text, String url, boolean highPriority)
void fully.log(int type, String tag, String message) // Access clipboard
// No access with Android 10+ if Fully is in background void fully.copyTextToClipboard(String text) String fully.getClipboardText() String fully.getClipboardHtmlText()
// Run root command (rooted devices only)
void fully.runCommand(String command)
void fully.runSuCommand(String command)
void fully.reboot() // Provisioned and rooted devices only
void fully.shutdown() // Rooted devices only
Download and manage files
// Note that write access to external SD card is not supported void fully.deleteFile(String path) void fully.deleteFolder(String path) // recursive! void fully.emptyFolder(String path) // recursive! void fully.createFolder(String path) String fully.getFileList(String folder) // get JSON array boolean fully.writeFile(String path, String content)
String fully.readFile(String path) // ver. 1.55+ void fully.downloadFile(String url, String dirName)
void fully.downloadFile(String url, String dirName, boolean showToastMessages) void fully.unzipFile(String fileName) void fully.downloadAndUnzipFile(String url, String dirName) // Respond to download/unzip events
void fully.bind('onDownloadSuccess','todo("$url","$dir","$code","$fileLength","$lastModified","$mimetype");')
void fully.bind('onDownloadFailure','todo("$url","$dir","$code");') void fully.bind('onUnzipSuccess','todo("$url","$dir");') void fully.bind('onUnzipFailure','todo("$url","$dir","$message");')
Use TTS, multimedia and PDF
void fully.textToSpeech(String text) void fully.textToSpeech(String text, String locale) void fully.textToSpeech(String text, String locale, String engine) void fully.textToSpeech(String text, String locale, String engine, boolean queue) // ver. 1.38+ void fully.stopTextToSpeech()
void fully.initTts() // ver. 1.55, listen for ttsInitSuccess event for $info, containing available engines, voices and locales
void fully.playVideo(String url, boolean loop, boolean showControls, boolean exitOnTouch, boolean exitOnCompletion) void fully.stopVideo()
// Audio Streams: 0 – Voice Call, 1 – System, 2 – Ring, 3 – Music, 4 – Alarm, 5 – Notification, 6 – Bluetooth, 8 – DTMF, 9 – TTS, 10 – Accessibility
void fully.setAudioVolume(int level, int stream) // level: 0..100 void fully.playSound(String url, boolean loop) void fully.playSound(String url, boolean loop, int stream) void fully.stopSound() void fully.showPdf(String url) int fully.getAudioVolume(int stream) boolean fully.isWiredHeadsetOn() boolean fully.isMusicActive()
Control Web Browsing
// Manage web browsing
String fully.getStartUrl() void fully.setStartUrl(String url)
void fully.loadStartUrl()
void fully.addToHomeScreen()
void fully.shareUrl() void fully.print() // window.print() doesn't work void fully.print2Pdf(String filename) // Print A4 paper w/o prompt
String fully.getScreenshotPngBase64() String fully.loadStatsCSV()
// Purge web items
void fully.clearCache() void fully.clearFormData() void fully.clearHistory() void fully.clearCookies() void fully.clearCookiesForUrl(String url) void fully.clearWebstorage()
void fully.resetWebview // ver. 1.55.3+
// Manage web tabs
void fully.focusThisTab()
void fully.focusNextTab() void fully.focusPrevTab() void fully.focusTabByIndex(int index) int fully.getCurrentTabIndex()
int fully.getThisTabIndex() void fully.closeTabByIndex(int index) void fully.closeThisTab() String fully.getTabList() // returns a JSON array void fully.loadUrlInTabByIndex(int index, String url) void fully.loadUrlInNewTab(String url, boolean focus)
Barcode Scanner
// Use $code placeholder in the resultUrl, see example below void fully.scanQrCode(String prompt, String resultUrl) // Enhanced interface // Use -1 for cameraId and timeout (in seconds) for defaults void fully.scanQrCode(String prompt, String resultUrl, int cameraId, int timeout, boolean beepEnabled, boolean showCancelButton)
// Activate flashlight if needed
void fully.scanQrCode(String prompt, String resultUrl, int cameraId, int timeout, boolean beepEnabled, boolean showCancelButton, boolean useFlashlight) // Respond to QR events void fully.bind('onQrScanSuccess','todo(\'$code\');') void fully.bind('onQrScanCancelled','todo();')
Bluetooth Interface
// Get a list of known devices incl. connection state and battery levelRead NFC Tags
String fully.btGetDeviceListJson()
// Open a serial (SPP) bluetooth connection (GATT is not supported!) // These functions are async, listen to events below to get results void fully.btOpenByMac(String mac) void fully.btOpenByUuid(String uuid) void fully.btOpenByName(String name) // Get info about connected device and close connection boolean fully.btIsConnected() String fully.btGetDeviceInfoJson() void fully.btClose() // Send data boolean fully.btSendStringData(String stringData) boolean fully.btSendHexData(String hexData) boolean fully.btSendByteData(byte[] data) // Respond to events void fully.bind('onBtConnectSuccess','todo("$device");'); void fully.bind('onBtConnectFailure','todo();'); void fully.bind('onBtDataRead','todo("$data");'); // Data is buffered until LF symbol found
bool fully.nfcScanStart();Respond to Events
bool fully.nfcScanStart(int flags, int debounceMs);
bool fully.nfcScanStop();
void fully.bind('onNdefDiscovered','todo("$serial", "$message", "$data");');
void fully.bind('onNfcTagDiscovered','todo("$serial", "$type", "$message", "$data");');
void fully.bind('onNfcTagRemoved','todo("$serial");'); // Android 7+
// The second parameter is a String containing JavaScript code to perform
void fully.bind('screenOn','todo();') void fully.bind('screenOff','todo();') void fully.bind('showKeyboard','todo();') void fully.bind('hideKeyboard','todo();') void fully.bind('networkDisconnect','todo();') void fully.bind('networkReconnect','todo();') void fully.bind('internetDisconnect','todo();') void fully.bind('internetReconnect','todo();') void fully.bind('unplugged','todo();') void fully.bind('pluggedAC','todo();') void fully.bind('pluggedUSB','todo();') void fully.bind('pluggedWireless','todo();') void fully.bind('onScreensaverStart','todo();') void fully.bind('onScreensaverStop','todo();') void fully.bind('onDaydreamStart','todo();') void fully.bind('onDaydreamStop','todo();') void fully.bind('onBatteryLevelChanged','todo("$level");') void fully.bind('volumeUp','todo();') void fully.bind('volumeDown','todo();') void fully.bind('onMotion','todo();') // Max. one per second
void fully.bind('facesDetected','todo($number);') // 1.48+ void fully.bind('onDarkness','todo();') // Requires screen off on darkness void fully.bind('onMovement','todo();') void fully.bind('onIBeacon','todo("$id1","$id2","$id3",$distance);')
void fully.bind('broadcastReceived','todo("$action","$extras");');
void fully.bind('onQrScanSuccess','todo("$code","$extras");');
void fully.bind('ttsInitSuccess','todo("$info");'); // ver. 1.55+
Manage Screensaver, Other Apps, Intents, Kiosk etc.
// Manage fully kiosk screensaver
void fully.startScreensaver() void fully.stopScreensaver() void fully.startDaydream() void fully.stopDaydream()
// Manage fully kiosk app
boolean fully.isInForeground() void fully.bringToForeground() void fully.bringToForeground(long millis) // Delay in ms void fully.bringToBackground() void fully.restartApp()
void fully.exit()
// Manage kiosk mode and maintenance mode
void fully.enableMaintenanceMode() void fully.disableMaintenanceMode() void fully.setMessageOverlay(String text)
void fully.lockKiosk()
void fully.unlockKiosk()
void fully.checkKioskPin()
boolean fully.isKioskLocked()
// Manage other apps and broadcasts
void fully.startApplication(String packageName) void fully.startApplication(String packageName, String action, String url) // Can put null to omit the parameter void fully.startIntent(String url) void fully.broadcastIntent(String url) void fully.registerBroadcastReceiver(String action)
void fully.unregisterBroadcastReceiver(String action)
void fully.killBackgroundProcesses(String package) // Android 13 and older
void fully.installApkFile(String url) // Not in Google Play Edition
Motion Detection
void fully.startMotionDetection() void fully.stopMotionDetection() boolean fully.isMotionDetectionRunning() String fully.getCamshotJpgBase64()
int fully.getFaceNumber() void fully.triggerMotion() void fully.bind('onMotion','todo();') // Triggered max. once per second
Manage all Fully settings
// Look in Remote Admin settings for the settings keys // Or export a JSON settings file and look there
String fully.getBooleanSetting(String key) String fully.getStringSetting(String key)
// Changes apply immediately void fully.setBooleanSetting(String key, boolean value) void fully.setStringSetting(String key, String value) void fully.importSettingsFile(String url)
Manage System Settings (FKB 1.55.3+)
// Look here for keys and restrictions
// Changing system settings usually requires provisioning or special permissions
// https://developer.android.com/reference/android/provider/Settings
fully.getSettingsGlobalInt(String name, int default)
fully.getSettingsGlobalLong(String name, long default)
fully.getSettingsGlobalString(String name)
fully.putSettingsGlobalInt(String name, int value)
fully.putSettingsGlobalLong(String name, long value)
fully.putSettingsGlobalString(String name, String value)
fully.getSettingsSystemInt(String name, int def)
fully.getSettingsSystemLong(String name, long def)
fully.getSettingsSystemString(String name)
fully.putSettingsSystemInt(String name, int value)
fully.putSettingsSystemLong(String name, long value)
fully.putSettingsSystemString(String name, String value)
fully.getSettingsSecureInt(String name, int def)
fully.getSettingsSecureLong(String name, long def)
fully.getSettingsSecureString(String name)
fully.putSettingsSecureInt(String name, int value)
fully.putSettingsSecureLong(String name, long value)
fully.putSettingsSecureString(String name, String value)
Samples how to use the JavaScript interface:
How to use JavaScript Interface?If you can’t change the website you can use the Inject JavaScript feature in order to put your scripts in other websites.
Fully Kiosk supports publishing device info and major device events to the MQTT broker. You can setup the broker URL (like tcp://farmer.cloudmqtt.com:18075 or ssl://farmer.cloudmqtt.com:28075) and credentials in Other Settings >> MQTT Integration. You can also specify the MQTT Client ID if you don’t like the random one.
The complete device info will be published every 60 seconds as fully/deviceInfo/[deviceId] topic (retaining, QOS=1).
Events will be published as fully/event/[eventId]/[deviceId] topic (non-retaining, QOS=1). Following events are implemented for now: screenOn, screenOff, pluggedAC, pluggedUSB, pluggedWireless, unplugged, networkReconnect, networkDisconnect, internetReconnect, internetDisconnect, powerOn, powerOff, showKeyboard, hideKeyboard, onMotion, onDarkness, onMovement, volumeUp, volumeDown, onQrScanCancelled, onBatteryLevelChanged, onScreensaverStart, onScreensaverStop, onDaydreamStart, onDaydreamStop, onItemPlay, onPlaylistPlay, facesDetected.
With Fully Kiosk Browser 1.41+ you can customize the MQTT topic names. Starting Fully Kiosk Browser 1.50 MQTT support will be only available with Android 7+ devices. The last version with support for Android 6 and older is FKB 1.49.1 (download APK).
With Fully Exam Kiosk you can lockdown the device to the exam website. Other websites, apps or device features can’t be used during the examination. You can use your school’s devices or let students bring their own Android devices (BYOD).
INFORMATION FOR STUDENTS.
Fully Exam Kiosk app supports Android 5.0 to 14. The app also won’t run in Fire OS, Chrome OS, Android TV and on rooted devices as it’s impossible to provide a secure kiosk mode on those devices.
You have to get an FEK file or link from your teacher and open it in the app. On the first start please grant requested runtime permissions in order to lock the exam in the safe kiosk mode.
The kiosk mode will be stopped by:
INFORMATION FOR TEACHERS.
Fully Exam Kiosk browser supports safe exams with all learning management systems (LMS) that support Safe Exam Browser (SEB) including Moodle. These LMS require using a safe browser and don’t allow opening the exam website in other web browsers even if the students know the URL. Although we are not affiliated with SEB and Fully Exam Kiosk doesn’t support many features of Safe Exam Browser, if you know how to use Safe Exam Browser you likely will be able to use our exam browser for exams with your Android devices. You can use Fully Exam Kiosk as replacement of Safe Exam Browser for Android.
You can also use Fully Exam Kiosk with any other exam website if you can keep your exam URL secret. Otherwise your students will just open that URL in another browser without any restrictions.
A teacher can configure an exam here and give a permalink (URL) or .fek file to the students. Students just open the .fek configuration link/file in the Fully Exam Kiosk app and make the exam in preconfigured secure kiosk mode. When asked the show on top and usage data access permissions must be granted in order to provide a safe kiosk mode.
Note that many browser features like tabs, popups, file uploads, cam and microphone access, opening other files and starting apps are intentionally disabled in the exam browser window. Tell us if you want to use some of those features.
Using Fully Exam Kiosk is completely free of any charges at least until end of 2025.
Are you missing any features? Your feedback is welcome!
Fully Video Kiosk is our separate app for playing videos and image slideshows on Android devices with full kiosk mode protection. With Fully Video Kiosk you can manage a playlist containing URLs to media files or websites as well as files and folders from the local internal/external storage.
Fully Video Kiosk is available on Google Play and as APK file
Fully Video Kiosk can play:
Fully Video Kiosk contains all features included in Fully Kiosk Browser except NFC Tag reading, Single App Kiosk Mode and Universal Launcher.
Additional configuration settings in Fully Video Kiosk:
Playlist SettingsThere are additional JavaScript interface functions to control the player which can be used in the wallpaper or playlist sites:
void fully.playerStart()
void fully.playerStop()
void fully.playerPause()
void fully.playerResume()
void fully.playerNext()
// Respond to events (ver. 1.7+)void fully.bind('onItemPlay','todo("$url");');
void fully.bind('onPlaylistPlay','todo();');
There are also corresponding REST interface features cmd=playerStart, cmd=playerStop, cmd=playerPause, cmd=playerResume and cmd=playerNext included. Starting ver. 1.7 in the Usage Stats there are counters for playlistPlays and itemPlays.
A Fully PLUS License is also valid for Fully Video Kiosk. You can obtain a Fully PLUS license for the device and use it with any Fully Kiosk app at your choice.
The default settings file is called fully-video-settings.json. You can use fully-video-auto-settings.json or fully-video-once-settings.json for auto import when deploying. You can add the Fully Video Kiosk device to Fully Cloud, organize and control it there too.
Fully Single App Kiosk is our separate app for locking down the device to one selected app. Everything else will be blocked. Fully Single App Kiosk is very easy to configure. Just select an app, set a Kiosk PIN, ready!
Remember to TAP VERY FAST 7 TIMES in order to see the PIN dialog. If you type very fast in another app this could also be detected as 7 fast taps. Unfortunately we can’t detect a more sophisticated gesture while another app is in foreground. Please use the Single App Exit by Remote Admin only option in this case.
Fully Single App Kiosk is available on Google Play and as APK file. For device provisioning with enterprises support and for deployment please use the single app mode in our Fully Kiosk Browser app.
A Fully PLUS License is also valid for Fully Single App Kiosk. You can obtain a Fully PLUS license for the device and use it with any Fully Kiosk app at your choice. You can add the Fully Single App Kiosk device to Fully Cloud, organize and control it there too.
Your feedback is welcome!
The Fully PLUS License works with all Fully Kiosk apps (except Fully Exam Kiosk) and allows to use all Fully PLUS features (without watermark and spoilers) as well as the Basic Fully Cloud Features. For a one-time payment you’ll get a lifetime non-exclusive transferable usage license including all future updates for the Fully Kiosk apps and all future PLUS features.
All PLUS features are FREE to try. Please test all needed Fully Kiosk features with your content and your devices before ordering a license. If something isn’t working please contact us before ordering anything. Buying a license won’t fix any bug.
Fully PLUS Single License
A Fully PLUS Single License is only 7.90 EUR per device plus VAT – one-time payment payable with PayPal for a lifetime license. (The price on Google Play can be slightly different.) There are no other fees/taxes on our invoice. The single Fully PLUS License can be comfy obtained directly in the Fully Kiosk app menu. Or, if you prefer using another device/browser, you can use this button but double check the device ID when typing.
The single license is bound to your device ID and activated immediately when the payment is completed. There is no license key. Internet connection is required on your Android device. If you need you can move your single licence to another device later here:
Fully PLUS Volume License
If you order a license for 10 or more devices you can obtain a Fully PLUS Volume License with special conditions. This offer is for commercial users only (no consumer contracts). You can pay by credit card (using Stripe.com), by PayPal or even by bank transfer. You will get one Volume License Key (like ABCDEF0815) which can be used for activating the license on all your devices. The key will be sent automatically to your email address once the payment is completed. You have to enter this key in Fully’s Other Settings in order to activate the license on this device (Internet connection required). Check our manual for the fast deployment process. Get the volume license quote and order here:
You can check your Fully PLUS Volume License status and list registered devices here. You can un-register the device from the Volume License by removing the volume key from Other Settings. Please don’t forget to un-register prior to uninstalling the app, resetting, repairing or disposing the devices. Note that enabling/disabling the Wifi can change the device ID under some conditions, avoid changing the Wifi status after license activation.
Starting FKB 1.51 the volume license key is saved encrypted in the app settings after license activation. If you need to import the JSON settings file into an older installation you have to replace the volumeLicenseKey by its not encrypted value.
Licensing for Offline Devices
Your devices must be able to connect to https://licensing.fully-kiosk.com for the single or volume license activation. Once activated the device may keep offline for indefinite time without loosing the license.
If your devices may not connect to Internet for some reasons at all you can use the Offline Licensing. Fully PLUS Volume License is required and it’s some more manual work.
If you have access to the Remote Admin of cause you can collect the Device IDs from Remote Admin interface and load the license file to the device by Remote Admin.
Announcement for Android 4.4
We stopped supporting Android 4.4 by the End of 2021. The Fully PLUS Licensing and Fully Cloud connectivity stopped for Android 4.4 devices by 31 December 2021. Please migrate to newer devices.
Device provisioning is the fastest way to setup devices with Fully Kiosk and to provide an even better kiosk protection. Fully Kiosk supports all available methods of Android device provisioning. Device provisioning is free with your Fully PLUS License. Once configured you can setup new devices with almost no manual effort.
Note that the most provisioning methods require factory new or factory resetted devices. If Android setup was already started/done on the device it must be factory resetted. For Android 7+ devices we recommend using QR Code provisioning method. If you can’t make device reset you can still use the ADB (manual) method.
You can configure the device provisioning and get instructions here:
This configurator offers only few provisioning options. You can apply all app settings, use enterprises, add device to the cloud and more if you use provisioning profiles in your free Fully Cloud EMM account.
Provisioning Methods Overview
Provisioning Methods | NFC | DPC Identifier | ADB (manual) |
Restrictions for Target Devices | Android 6+, NFC capable devices only | Android 6+ | Android 5+ |
New or Factory Resetted Device Required | yes | yes | no |
Connect to Wifi automatically | yes | no | no |
Manual Enter Provisioning Code | no | yes | yes |
Internet Connection Required | no | yes | no |
Install Fully App from Custom URL APK | yes | no | yes |
Provisioning Methods | Zero Touch | QR Code |
Restrictions for Target Devices | Android 8+ | Android 7+ |
New or Factory Resetted Device Required | yes | yes |
Connect to Wifi automatically | no | Android 7-8: no Android 9+: yes |
Manual Enter Provisioning Code | no | no |
Internet Connection Required | yes | Android 7-8: yes Android 9+: no |
Install Fully App from Custom URL APK | no | yes |
With all provisioning methods you can optionally:
The provisioned device has a number of additional Device Owner Settings for a better kiosk mode protection available (like disable USB, ADB, status bar, screen capture, safe mode etc.).
With provisioned Android 6+ devices you can silently install/upgrade apps from APK file using the APK Files to install option in Device Owner Settings or the Install APK File button in Remote Admin. Installing APK files isn’t available if you install Fully Kiosk from Google Play.
The most but not all device types support device provisioning. Fire OS devices don’t support, for example. Ask your device vendor if you are not sure. Device provisioning for Android 12+ devices is supported starting Fully Kiosk Browser 1.44.3, Fully Single App Kiosk 1.8.1 and Fully Video Kiosk 1.8.1.
Please keep at least one device of each type as reference and for testing and attend to this FAQ about recommended settings for making your kiosk mode secure.
Ask us if you need any support with device provisioning for Fully Kiosk. If you can’t use device provisioning you can deploy Fully app as described here.
With Android Enterprise you can silently manage apps on your Android 6+ devices. This however requires your devices to be connected to the Internet, to have access and to use the Google services. You also have to accept the Google Managed Play agreement and data processing and security terms.
Create a new Enterprise in the Enterprise menu on Fully Cloud. You will be guided by Google to create an admin account. You do not need to have registered this email address with Google in advance, and Google Workspace accounts are not required. Any email addresses associated with your company domain are supported, including Microsoft Entra accounts. Then you can approve apps for your enterprise, configure apps to be auto-installed, set default permissions and managed configurations (if your app supports) in Fully Cloud EMM (look for Manage Apps button on the Enterprise entry). You can also manage apps and set the auto-update policy for each device individually, look for Manage Apps button on the device entry.
We recommend that all organizations add multiple owners to their Managed Google Play Account enterprises to ensure that they retain control of the enterprise at all times.
The only way to add device to the Enterprise is by making device provisioning. You can select the Enterprise when creating a provisioning profile in Fully Cloud. Note that only our Fully Kiosk Browser app supports Enterprises.
Our company is Android Enterprise Silver partner. We earned this badge by meeting business, product and performance requirements. Silver partners are validated by Android Enterprise
If you can’t use the device provisioning for some reason you can easily deploy Fully to many devices as follows:
Please make sure to take the special APK file Deployment Edition. This edition brings a Read Storage Permission dialog on the first app start. This is needed to auto-import the settings.
Please keep at least one device of each type as reference and for testing and attend to this FAQ about recommended settings for making your kiosk mode secure.
With 300+ options Fully Kiosk apps can be configured for many different use cases. Don’t be afraid. Usually you have to change only very few options. Just to give you some ideas for the most common scenarios:
Please also check the recommended settings for unattended devices for the best kiosk mode protection.
My website doesn't look/work correct/fast in Fully Kiosk Browser?Fully Kiosk uses Android Webview (Chromium based) provided by Android on your device for any website loading, caching, rendering and scripting (incl. embedded videos etc.). Fully Kiosk can’t select another web engine or change a lot about how Android Webview is handling websites. If something is wrong with your website please follow these topics:
1. Check and update the available Android Webview on your device.
You can check the available Webview version and provider app in Fully Settings >> Other Settings >> Device Info. The websites could run into some issues if the installed Webview is not up to date. In this case you should install/update the Webview provider app from Google Play or by appropriate APK from APKmirror.com. Some devices can only update the Webview by system update, check this FAQ and this FAQ.
With Android 4.4 the Webview (ver. 30 or 33) is integrated in Android OS. It’s more or less buggy and not updatable. There are different serious issues known resulting of these outdated web engines. Yes, other major browsers like Chrome, Firefox or Opera can bring their own web engines and show better results with those old devices. But it’s impossible to use their engines by other apps, so you should look for a newer Android version for your device or a newer device. Fully Kiosk completely stopped supporting Android 4.4 by the End of 2021.
With Android 5+ the Webview is provided by one of these apps that can be installed and updated separately:
On some devices you can choose the Webview provider app in Android Developer Settings (also available in Fully Settings >> Advanced Web Settings >> Select Webview Implementation). In some cases you have to uninstall/disable one provider app in order to use another one as Webview provider. There are however no differences known between Webviews provided by those two apps (if on the same version). Read this for more technical details.
Note that the current Android Webview is only available for Android 7+ devices. For Android 5 the latest available Webview version is 95. For Android 6 the latest available Webview is 106. If you experience any issues with outdated Webview upgrading the Android version or replacing the device is the only way to go.
Note that Webview can only use the trusted root TLS certificates installed in your Android device that can cause issues with some websites in Android older that 7.1.1. Check this FAQ.
2. Check your website is working properly in Google Chrome on the same device.
If your website isn’t working properly with Google Chrome on the same Android device Fully Kiosk probably won’t make it better, even if the latest Webview is installed. Please optimize your HTML/CSS/JS code for Chrome on Android. Do not compare to other browsers (Firefox, Dolphin, Opera etc.) or other platforms (Windows, Mac). Those web engines may work significantly different in some details. A few Google Chrome APIs are not available in Android Webview, check known issues.
3. Check your website with Remote Webview Debugging.
If your website is running ok in Google Chrome but not in Fully Kiosk Browser web developers can enable Webview Content Debugging in Advanced Web Settings and use the remote debugging with Chrome Developer Tools in order to see what happens behind the scenes and where the different behavior comes from.
If some colors are showing wrong switch OFF the Dark Mode in app settings.
Please also check the Web Content Settings in Fully Kiosk. If something (like popups, form data saving, geolocation, alert boxes etc.) isn’t working it can be caused by a restriction controlled by Fully. In very rare cases you can improve the rendering by selecting another Graphics Acceleration mode in Advanced Web Settings. Please also check the known issues.
My website is showing in the wrong resolution?Fully Kiosk Browser doesn’t select or force any screen resolution. Note that devicePixelRatio bigger than 1 can be set for your high resolution screen by the Android Webview. This affects the CSS pixel size reported by window.screen.width and window.screen.height. We are unable to change this by our app. Check you have the latest Android Webview available on your device and let your web developers learn in this training and this answer how to support high resolution screens (FullHD, 4K) properly.
My website is suddenly showing SSL errors?Starting some point in 2024 your website can fail loading in Fully Kiosk on Android versions older than 7.1.1. This is because of the missing ISRG Root X1 root certificate used by many websites certificates signed by Let’s Encrypt. Android Webview can only use the trusted root certificates installed in your Android device. You can ask your website provider to use a certificate supported by the older Android versions. Or you can download and install ISRG Root X1 and Let’s Encrypt R3 certificates manually on your device in Android Settings > Security > Credential Storage > Install from SD Card (or similar). In Fully Kiosk Browser 1.55.3+ we allowed the ISRG Root X1 and ISRG Root X2 certificates to mitigate this issue.
Why Fully Kiosk still reports the outdated Webview?If you’ve installed the latest Android Webview and Google Chrome but Fully Kiosk still shows an outdated Webview version in the Device Info box (in Other Settings) your Android device likely has an AOSP ROM where you can’t update the Webview. The integrated Webview has another app ID (com.android.webview) than one provided by Google Play (com.google.android.webview). Read this for more technical details. So the new Webview will be installed side by side but the old integrated Webview will still be used by Android system (and it’s app ID is hardcoded in Android OS). On rooted devices you can use this Magisk module to select another Webview. There has also been a discussion at Chromium with backgrounds why is it done like this. Sorry, this is something where Fully Kiosk can’t change anything. Please ask you device vendor for a Webview update.
How can I use the Fully Kiosk with Android 12+?Devices running Android 12+ will have some kiosk mode protection gaps if you don’t follow the recommendations in this FAQ. This is something we can’t completely solve by an app upgrade due to new restrictions built-in in Android 12+:
In order to maintain the secure kiosk mode with Android 12+ you have three options:
If your device is already on Android 11 please check this page and ask your device vendor if your device will be upgraded to Android 12 and if there is a way to prevent the update. On Samsung devices you can disable the OTA update using the KNOX settings. Check this article for other ways to disable the OTA updates. If there is a risk that your device will upgrade or auto-upgrade to Android 12 please follow the recommendations above.
Why I can't login to my Google Account in Fully Kiosk Browser?Some users are reporting an issue (“Couldn’t sign you in. This browser or app may not be secure”) when trying to login to the Google Account in Fully Kiosk Browser.
For security means Google obviously decided to disallow using the Google Account also in Android Webview (that is used by Fully Kiosk and many other apps). For now the Android Webview however doesn’t seem to be blocked 100%. Depending on something (OS, version, network or location?) some users still can login in Google Account while other users experience this issue.
The official solution should allow less secure apps to login as described here. However users reported that it doesn’t have any effect for Android Webview.
The working workaround for now is to select Edge as Fake User Agent in Fully Kiosk Advanced Web Settings. However no idea how long this can work. If Google really decides to block all logins in Android Webview there will be no workaround anymore. This is unfortunately something out of our control.
Why doesn't my webcam video play in the web page?If your webcam video requires Basic HTTP Authentication (it’s URL starts with http://user:auth@host…) and you embed this video in your page by using the oder tag it probably won’t work as the authentication for embedded contents is not allowed in Android Webview (as well as in Google Chrome on Android) for security reasons. For more information please read the discussion on this topic at Chromium Bugtracker. This is something Fully can’t change. The only known workaround is using the video proxy.
If your website is loaded as HTTPS document and your webcam URL is HTTP, so it might blocked as it’s not allowed to mix secure and non-secure contents. You can try changing the Mixed Content Mode option as workaround. However Android Webview 111+ has a known bug and often blocks all mixed content, so this option doesn’t work anymore.
If your camera stream is RTSP you can’t embed it into your website with tag as this is currently not supported by the Webview. Check this FAQ for alternatives.
How can I use local files on the device in Fully?You can use a file URL to address local files each time an URL is required in Fully. The full file URL looks like file:///sdcard/path/to/file.html Note the triple slash and that /sdcard usually refers to internal storage. You can use the file picker in URL dialog boxes to pick the file from storage. You can also select a file on external SD card. The path to external SD card will be saved in settings as /sd_ext and replaced by the real path on each device dynamically. Note that Fully Kiosk doesn’t support any write access to external SD card due to restrictions in Android OS.
Note the any links to local files or embedding local files from HTTP/HTTPS documents are disabled by Android Webview for some security reasons. But you can use the Localhost File Access option in Advanced Web Settings in order to access local files using https://localhost/… or http://localhost/… address. The full URL for a local file should look like https://localhost/sdcard/path/to/file.mp4. So you can for example embed the local video/image files in your HTTPS website.
If your devices are using Android 11+ or Android 11 OTA upgrade is pending please urgently attend to the scoped storage restrictions.
How can I load content files to the device?You can use the Load ZIP File button in Remote Admin and Fully Cloud to download and unpack a ZIP file to /sdcard (or to the app private storage in Android 11+ scoped storage mode) on the device. Note that /sdcard usually refers to the internal public storage (not to the external SD card!) on most devices. You have to put the ZIP file on some web server where it can be accessed by the device and provide the HTTP/HTTPS URL. This is the way to make a light local content management. Use with care as all existing files will be overwritten when unpacking the same file names from the ZIP file. Avoid non-latin letters in the packed file/folder names or make sure the packer is using UTF-8 encoding. When using this feature from Fully Cloud you can load ZIP file to many devices with only one click (mass admin). You can set the File Load Timeframe in Cloud Settings in order to randomize the file loading across devices within the specified timeframe (next x seconds).
Starting ver. 1.43 you can force unneeded files to be deleted when unpacking if you put files of zero size in the ZIP file. Zero size files will be not extracted but deleted from device. Starting version 1.44 you can put a file .delete into ZIP archive containing the list of files and folders to remove before unzipping. So you can update the whole folder content and don’t care about filenames. Sample ZIP file is here.
You can use the Load Content From ZIP File option in Device Management settings in order to download and unzip file from some URL to /sdcard (or to the app private storage in Android 11+ scoped storage mode) folder automatically. Fully Kiosk will check each hour for updates on this URLs (according to servers Last-Modified HTTP response header). On the first app start the ZIP file will be downloaded prior to loading the Start URL. Use Auto-Reload on Idle option to reload the Start URL when device is not in use in order the updated local files can take effect.
For hosting the ZIP files you can now use the File Storage in Fully Cloud. If you need a bigger storage, please note that ZIP file download currently can’t work properly with files on Google Drive as Google Drive doesn’t provide Last-Modified time. If you don’t have your own webserver we recommend using Dropbox for bigger ZIP file hosting. The download URL must then look like this: https://www.dropbox.com/s/k7xdrtk8ujvqyf0/archiv.zip?dl=1
You can see the results of long running download commands in Fully Log on the Remote Admin. We recommend enabling the maintenance mode during changing content files on the devices.
You can also use the JavaScript API to silently download/unpack files, list files, delete files or folders from your website.
Of cause you can also use some other file sync app to sync local files with remote storage. However you likely can’t install/configure that app automatically like Fully Kiosk.
Why the motion detection doesn't work reliably in Android 14+?Starting Android 14 Google/Android enforces a privacy concept for restricting apps from using the camera and microphone when the app is not in use. Starting Fully Kiosk Browser ver. 1.56, Fully Single App Kiosk 1.16 and Fully Video Kiosk 1.15 our kiosk apps will comply with this enforcement. Good news: The restrictions only apply to Android 14+ and only if you update to the app versions listed above from Google Play. If you install APK files from our website the restrictions will be not active and the motion detection should work stable even if another app is in foreground or the screen is off.
Why I can't see/use some local files in Android 11+?Starting Android 11 Google/Android enforces a privacy concept called scoped storage. In short: Normal apps can’t access most of files on the device public storage anymore. Starting Fully Kiosk Browser ver. 1.44, Fully Single App Kiosk 1.8 and Fully Video Kiosk 1.8 our kiosk apps will comply with this enforcement. Good news: The restrictions only apply to Android 11+ and only if you update to the app versions listed above from Google Play. If you install APK files from our website the scoped storage restrictions will be not active.
If your kiosk app is running in scoped storage mode:
If you need only few bookmarks and you don’t use the Kiosk Mode please check the Add to Home Screen feature on the menu. The current page link shortcut will be added to your Android’s Home Screen.
Otherwise you can add your favorite websites to the Universal Launcher and use it as your bookmark page. You can even seamlessly mix apps, websites and file shortcuts on the launcher.
How can I use multiple tabs in Fully?You can specify multiple Start URLs (type one URL per line and press Enter to start new line). The URLs will be opened on separate tabs. You can enable visible tab flaps and set colors in Toolbars and Appearance settings. In Web Browsing Settings you can also enable Swipe to Change Tabs to be able to change between tabs by swiping left or right.
There are also some JavaScript and REST APIs available to manage tabs programmatically. You can still use the usual JavaScript methods window.open() and window.close() to open and close new tabs.
How can I use the screensaver in Fully Kiosk?Configure the Screensaver Playlist in Screensaver settings. You can add media files, folders, URLs to media files or websites. Look in each item configuration for the Play next item after… option, otherwise it may be shown forever. You can also change the Wallpaper URL if you don’t like the default black background and set the Screensaver Brightness for the display. Let Keep Screen On option in Fully Kiosk Device Management Settings enabled and do not use any Android Display Settings. Now set the Screensaver Timer in order to start the screensaver after some time of user inactivity. If you are going to use the Fully Screensaver with other apps please enable the Touching Other Apps Restarts Idle Timer in Fully’s Other Settings.
Can I wake up the screen by tapping it?When the device screen is completely off you usually can’t wake up the device as the switched off display can’t recognize any taps. You can use display dimming instead of screen off by setting the Screensaver Timer to the delay in seconds and Screensaver Brightness to 0. Also keep the Screensaver Wallpaper URL at fully://color#000000 for the maximum darkness. The real dimming level is depending on the device. You can then wake up by tapping the screen.
If you need to use the Screen Off Timer feature consider using different Motion Detection, Device Movement Detection or REST Interface alternatives for waking up the device.
Many new devices can be woken up by tap or double tap. Check the Android Settings for this option.
What are the different PINs and passwords for?You can have up to 6 keys when working with Fully:
You can change the Kiosk Mode PIN, the Wifi PIN, the Remote Admin Password and the Volume License Key via Remote Admin interface (locally or in Fully Cloud) in View/Edit Settings. For security reasons you cannot change the Remote Admin Password by importing a setting file via Remote Admin.
What is the difference between Fully PLUS License and Fully Cloud Subscription?This topic can be confusing sometimes. The Fully PLUS License and Fully Cloud Subscription are two separate products which are working independent from each other.
You can try all features of the Fully Kiosk app and cloud for one month for free. Just install the app from our website and register for the free Fully Cloud EMM account.
Can I get an invoice for my payment?For all completed PayPal or Stripe payments for Fully PLUS License we sent automatically an email from info@fully-kiosk.com to your PayPal/Stripe email address. Also please check your SPAM folder. Please use an invoice link in that email to get your invoice.
For all Google Play orders you can find the receipts and request VAT invoices in your Google Account.
For completed PayPal subscription payments please find your invoices in your Fully Cloud account in Menu >> Subscriptions >> Payments >> View >> Get Invoice.
You can now use our License & Invoice Finder to get all missing links to invoices for payments associated with your email address.
For data protection reason we absolutely can’t send invoices to other email address than one provided in your order or your PayPal email address.
If you like to pay your Fully PLUS Volume License by bank transfer please get an invoice from here. Type your company name/address and click the link Get an Offer/Invoice for Bank Transfer Payment.
If you like to pay your Fully Cloud Subscription (20+ devices) by the bank transfer or credit card please contact us to get an invoice prior to payment and provide your full company name/address and VAT ID (if in the EU).
How can I exit the Kiosk Mode?You have to make the Kiosk Exit Gesture in order to see the Kiosk PIN dialog box. Depending on Fully settings the Exit Gesture can be one of following:
The default Kiosk PIN is 1234
If you can’t exit the Kiosk Mode or can’t remember your Kiosk PIN there are following ways to escape:
1. If you have Remote Admin or Fully Cloud access to your devices, you can change the PIN or unlock the Kiosk Mode (ver 1.37+) via Remote Admin or Fully Cloud.
2. If you installed the app from APK file and not disabled the Settings Auto-Import in Other Settings, you can attach your device by USB cable and put the fully-once-settings.json file (rename in fully-video-once-settings.json for Fully Video Kiosk or fully-single-app-once-settings.json for Fully Single App Kiosk app) disabling the kiosk mode to the main folder of the internal memory (/sdcard). Then restart the device in order to auto-import the settings file.
3. If you have not enabled the Lock Safe Mode option in Fully Kiosk Mode settings, by Device Owner Settings or by KNOX Settings, you can boot into safe mode (ask your vendor for instructions with your device, usually you have to press some buttons during the boot) and uninstall Fully Kiosk. If you can’t uninstall Fully Kiosk in safe mode you can look in Android Settings for Home App and select the standard Android Home App.
4. Otherwise the Factory Reset is the only way to reuse the device.
There is no backdoor available in our apps for good reasons.
The PIN dialog appears accidentally on 7 fast taps. What to do?If you get the PIN dialog triggered accidentally when you are tapping fast 7 times or typing in another app you can choose one of these solutions. Try carefully!
1. Enable the Single App Exit by Remote Admin Only option in Kiosk Mode Single App Mode settings. This will disable the PIN dialog by 7 fast taps. You will only be able to exit from single app mode by the Remote Admin Unlock Kiosk button. Remote Admin must be activated in order this option to have effect. (ver. 1.32+)
2. Download, adjust the value in the JSON file fully-tapsToPinDialogInSingleAppMode.json and import this settings file. This will alter the number of fast taps required to show the PIN dialog in Single App mode.
3. Detect fast taps only within first X ms after screen on. So you have to switch the screen off and on before tapping. Download, adjust and import the file fully-millisScreenOnToPinDialogInSingleAppMode.json
Why has the Device ID changed?On the modern Android systems the normal apps don’t have access to permanent device identifiers like mac address or serial number for privacy reasons. We try to get the best Device ID based on the data available in your Android and your device. But if you reset the device or even reinstall the app the Device ID can change and we have no chance to recognize the device again. In this case you have to move a single Fully PLUS License to the new Device ID. For the Fully PLUS volume license you are required to unregister the device prior to device reset or app uninstall.
You can avoid changing Device ID if you use the device provisioning for device setup (recommended!) and don’t turn the Wifi on/off. On provisioned devices our kiosk app can access the permanent device identifiers.
The Fully Kiosk Browser is crashing. Why?If the Fully Kiosk app disappear randomly it may be crashing or being killed by Android OS. The 99% of such issues happen in the Android Webview that still has tons of known bugs (e.g. known memory leaks when using CSS animations).
1. The Android Webview can crash after some time due to high website complexity and resource usage what we unfortunately are unable to catch. You can try running a simple page like www.google.com. If the Fully Kiosk Browser doesn’t crash anymore then that’s 100% a Webview issue. Crashes like this usually start and stop due to some updates on the particular website or Android Webview updates. You can only prevent these crashes by upgrading/downgrading the Webview or simplifying your website.
2. If Fully Kiosk suddenly started crashing on each app start it could be introduced by a buggy Webview update like that in March 2021. We recommend disabling Webview/Chrome auto-updates once tested to avoid such risks. Please use device provisioning to be able to remote update the Webview manually when needed.
Enable these options in Other Settings in order to try the app auto-restart after all stops: Restart Fully After Crash, Restart Fully After Update, Run as Priority App. The Fully Kiosk restart mechanisms work best if Keep Screen On and Kiosk Mode options are enabled. Additional crash detection was added in Fully Kiosk Browser 1.54. Note that we still can’t restart in some cases after a Webview crash.
When Fully Kiosk is auto-restarting after crash there is a log entry, check the Fully Log in Remote Admin. If you want to know exactly what/how is crashing you can get and analyze a bug report just after crash on your device.
Which firewall rules I need to use Fully Kiosk?If your network is firewall protected for the Fully Cloud remote management you need to allow devices to access https://api.fully-kiosk.com and https://remoting2.fully-kiosk.com For Fully PLUS activation/deactivation devices also need access to https://licensing.fully-kiosk.com All communication to our servers is done by standard HTTPS.
If you use Enterprises please also check these network requirements.
How can I remove the system bars?1. If you only show websites in Fully Kiosk Browser or play media in Fully Video Kiosk the immersive fullscreen mode which is enabled by default is usually a sufficient solution. The system bars (status bar at the top and navigation bar at the bottom) are invisible but can be pulled up and disappear shortly.
In Kiosk Mode the system bars will be made useless. With Android 8+ the status bar can be pulled down in the Kiosk Mode but automatically collapse back so it’s still not usable on the majority of devices. You can use device provisioning or KNOX features for a better status bar protection.
In Android 12+ the status bar can be pulled down in kiosk mode. Check this FAQ for solutions.
2. If you start other apps it’s the responsibility of other apps to show the system bars or put them into immersive mode. We can only force other apps by our experimental Force Immersive Fullscreen option. Be aware of hard limitations of that option. All the keyboard input and back button will be out of order in other apps.
3. On provisioned devices you can use the lock task mode to securely lock/remove the status bar and reduce buttons on the navigation bar.
4. On Samsung devices you can use KNOX settings to disable the system bars or remove system bar contents.
5. With Android 10 and older you can use the status and navigation bar complete removal options which might work with majority of devices and all apps. These options however require additional permissions that can only be granted using ADB.
adb shell pm grant de.ozerov.fully android.permission.WRITE_SECURE_SETTINGS
For Fully Single App Kiosk use com.fullykiosk.singleapp, for Fully Video Kiosk use com.fullykiosk.videokiosk, for Fully Kiosk Browser Deployment edition use com.fullykiosk.emm instead of de.ozerov.fully in this command.
If something goes wrong while the system bars are removed you can easily un-remove them with following ADB command:
adb shell wm overscan 0,0,0,0
After granting permissions enable Remove Navigation Bar and Remove Status Bar options in Device Management Settings to remove the system bars.
How can I use URL whitelist in Fully?In Fully Kiosk Browser the Web Content Settings >> URL Whitelist setting can contain one or many URLs which are allowed to load. If you specify some whitelist URLs all other URLs will be blocked, you don’t have to put anything on the URL blacklist. The URLs added to the Universal Launcher will be auto-whitelisted automatically.
URL Whitelist is a multiline text field. Please type one URL per line and use the enter key on the keyboard to start a new line. You have to specify full URL including https:// and all query parameters. However you can use * as wildcard. For example, if you have to enable all Google and Youtube pages you can type these two lines into the whitelist setting:
*google.com* *youtube.com*
So all URLs including “google.com” or “youtube.com” will be allowed, regardless http or https, with or without www subdomain. In most cases the list above will be a sufficient whitelist.
You can narrow the whitelist using a line like this which only allows Google Maps, regardeless http or https:
*://maps.google.com/*
Or be even more precise. This one must be https, http will be filtered out:
https://www.google.com/maps?hl=de&*
Anyway it’s a good idea to put a star wildcard at the end of the URL.
How can I handle connection issues when loading websites?If the Wifi/ethernet connection of the device is not available immediately on device start you should keep the option Wait for Network Connection enabled. With this option Fully Kiosk Browser will not try to load any pages until a connection is established.
Put the Custom Error URL to detect website load errors and show a nice error page instead the default one. In Fully Kiosk Browser 1.45+ you can just use the nice embedded fully://errorpage URL for that. If something goes wrong when loading a web page the user will see the error page instead.
If you want the user to see the error page in case of Internet Disconnection immediately (without loading the next page – which can be frustrating) use the Load Error URL on Disconnection option. The real Internet connectivity is checked by pinging the IP address 8.8.8.8 every 10 seconds. Y ou can change the IP address to ping by a hidden option in Fully Kiosk: get this JSON settings file, edit and import it into Fully Kiosk.
Enable the Auto reload on Internet Reconnect option in order to come back to the right website automatically once the Internet connection reappeared.
How can I play videos in Fully?If you only want to play a video playlist please check out our Fully Video Kiosk app.
There are also several ways to play videos in Fully Kiosk Browser:
1. If you setup kiosk devices for another site and you know the Wifi Key/Password on that site you can specify these Wifi credentials in Force Wifi SSID and Force Wifi Keyphrase options on Fully’s Device Management settings. The device will then connect to that Wifi network automatically when SSID detected. Note that with Android 10+ this feature is only available with provisioned devices.
2. If you don’t know the Wifi credentials you can setup a special Wifi/Settings PIN on Kiosk Mode settings and give this PIN to the administrator on site. When entering this Wifi PIN instead of the Kiosk PIN that person can open the Wifi settings and connect the device to the network without being able to exit the kiosk or change other settings. Be aware that this feature can break the kiosk with some devices (like many Samsung tablets) as they allow access from Wifi settings to all other Android settings. In this case please try to use the experimental Select Wifi Network option (for Android 10+ this option is working only with provisioned devices) or put the following Android Settings activities onto the App Blacklist.
com.android.settings/.SettingsHow can I use other apps in Fully?
com.android.settings/.homepage.SettingsHomepageActivity
com.android.settings/.Settings$ConnectionsSettingsActivity
If you want to lock down your device to a single app please check out our Fully Single App Kiosk app. You can setup a single app kiosk very fast using that app.
In Fully Kiosk Browser you can start other apps in many different ways:
intent:#Intent;component=com.skype.raider/.Main;end intent:#Intent;component=com.android.mms/.ui.ConversationList;end
You can allow other apps to go foreground in Kiosk mode by adding the app package name to Kiosk Mode >> App Whitelist. E.g. if you want to allow incoming Skype calls add com.skype.raider to the app whitelist. If you are using the Task Lock Mode (on provisioned devices) you have to put the app also on the App Lock Task Whitelist if it must be allowed to start. Apps started directly by Fully Kiosk are whitelisted automatically und usually don’t need to be whitelisted.
If you need to find out the correct component name for some activity just add that app to the Universal Launcher and you will see the component name in the launcher item configuration. The part of the component name in front of the slash is the package name.
Restrictions when starting other apps:
If you have the Screen Lock enabled in Android Settings your device will ask you for a swipe, PIN, Pattern or Password after booting the device, after locking the screen with the power button, after screen off and when starting other apps. This is normal Android behavior. Fully Kiosk can show itself “above” the screen lock if you enable Unlock Screen option in Device Management settings (enabled by default). But Fully Kiosk can’t skip or disable screen lock for other apps. For this reason, when starting other apps with locked device the lock screen may be displayed. Unfortunately this is something impossible to change without changing the target app.
In many cases it’s recommended to set Lock Screen in Android Settings to None as workaround to disable the screen lock at all. Unfortunately we can’t do it automatically from the Fully Kiosk app. On provisioned devices you also have to switch on the Disable Keyguard option in Device Owner Settings. If you have the swipe screen lock set you can also try using the experimental Unlock Swipe Screen Lock option in Fully Kiosk.
If the Screen Lock is disabled you won’t be able to use the Lock Safe Mode option in Kiosk Mode settings. Enabling the Lock Safe Mode option will setup the PIN screen lock automatically. Please use device provisioning to enable Device Owner Settings for a better safe mode lock. On the most Samsung devices you can reliably disable the Safe Mode using the KNOX Settings.
Note that Unlock Screen feature is not working with many Fire OS devices. Check this FAQ.
How can I use the barcode scanner with Fully?Using an External or Integrated Hardware Barcode Scanner
External or integrated QR code scanners usually have a control app like Datawedge. By default the scanner usually emulates the keyboard and can enter the scanned code into the web fields. However the web field must be enabled and focused for this. The code must be something textual, binary values will cause issues. In many cases however this could be a sufficient integration.
Fully Kiosk supports different ways for a better integration with external scanner apps or hardware QR scanners. Check Barcode Scanner Settings in Other Settings. You can let Fully Kiosk:
If you can specify the intent category in your scanner app then keep it empty.
Note that the barcode readers may be unavailable if you use the Unlock Screen option in Fully Kiosk (enabled by default) until you unlock the screen manually.
Check below how to handle the resulting barcode.
Using Device Camera as Barcode Scanner
You can use the use the integrated camera of the device for QR Code scanning. You can start the QR Scanner by JavaScript interface scanQrCode() or the QR scan button on the action bar.
With JS API you can specify the prompt text and target URL, the camera ID, the timeout, enable/disable beep sound and show/hide the cancel button in the barcode reader UI using scanQrCode() function. Don’t forget to enable the Enable QR Code Scanner option in Advanced Web Settings. The HTML code sample for triggering barcode scanning:
Handling Resulting Barcode
For handling the scanned barcode from barcode app or device camera you can use Barcode Scan Target URL, Insert Barcode Into Website and Submit Form after Inserting options. Look in the Configuration how to use these options. Also JS API and MQTT events will be sent.
If your website has a focused field for barcode input you can disable popping up the soft keyboard by switching off the Enable Text Input or switching on the Always Hide Keyboard option in Advanced Web Settings. This makes the keyboard unusable on all websites however. You can disable keyboard for selected barcode scan pages by using the Fully JavaScript Interface and Inject JavaScript option with a code like this:
if (location.href=="https://url_of_barcode_scan_page") fully.setBooleanSetting("softKeyboard", false); else
fully.setBooleanSetting("softKeyboard", true);
Note that disabling keyboard can make the Listen to Keyboard Input option not working with some scanner apps.
Using External App as Barcode Scanner
You can use a different barcode app like ZXing Barcode Scanner for scanning barcodes and getting codes back to web. The app must support zxing: URL scheme. Enable Open URL Schemes in Other Apps option in Fully’s Web Content Settings and use this HTML code to make a scan button:
a href attribute-value" href="zxing://scan/?ret=http://mydomain.com/path/to/page.html?item=%7BCODE%7D">zxing://scan/?ret=http://mydomain.com/path/to/page.html?item= ">Scan Barcodea>
After a barcode is scanned the scanner app will proceed to the specified return URL. Select Fully Kiosk Browser to be always the browser for handling this URL when asked. If another browser app is opened for the URL you have to clear defaults in the app settings for that browser app.
What are the best settings for an unattended device?If you plan to run unattended devices check following topics in order to make your device locked and secure.
1. Reset Settings in Fully Kiosk (look in Other Settings) to get back to the recommended settings. Then double check every option you change. Enable the Kiosk Mode, set the Kiosk Exit Gesture and a good Kiosk Mode PIN. Enable the Remote Admin and set a fairly long Remote Admin Password. Enable Restart Fully options in Other Settings.
2. Use Device Provisioning to setup new devices. Switch ON the Disable Status Bar, Disable USB Storage, Disable ADB, Disable Boot in Safe Mode in Device Owner Settings.
3. On Samsung devices please also use the KNOX Settings for advanced protection.
4. On Android 11+ devices please attend to this FAQ for the secure kiosk mode.
5. Install the latest Android System Webview (for Android 5, 6 and 10+) or latest Google Chrome (for Android 7, 8 and 9) to avoid many Webview related issues.
7. If you have enabled Google Play on the device please disable Fully Kiosk auto-updates. You can’t select the auto-update time and during auto-update your device will be not protected. Please also disable auto-updates for Android System Webview, for Google Chrome and Android System updates if possible.
8. If you have Google App installed please disable Google Screen Search, otherwise a long press on the Home Button can make strange things.
How can I update Fully Kiosk app or install/update other apps remotely?1. You can update Fully Kiosk and other apps remotely without user interaction by using the Managed Google Play Enterprise in Fully Cloud. Then your apps can be managed and updated through Fully Cloud in cooperation with Google Play for Work. An Internet connection to Google servers and device provisioning is required for this solution.
2. An app update/install from APK file button is available on Remote Admin and Fully Cloud for provisioned devices with Android 6+. The Disable Apps From Unknown Sources (Disable APK Installs) option must be switched off in Device Owner Settings. For automatic app install you can put the APK file URL into APK Files to Install option in Device Owner Settings. An APK file will be downloaded by Fully Kiosk from URL provided and installed silently. Note that this option is not available if you installed Fully Kiosk from Google Play. Google Play editions don’t allow installing APK files.
3. A silent app update/install is also available on devices with root access. If you have rooted devices please enable the Root Features in Fully Kiosk for silent remote update/install (ver. 1.37+).
4. In all other cases you only can tell Fully Kiosk app to download and start installing an APK file via Remote Admin. IMPORTANT: In these cases user input will be required ON THE DEVICE for confirming the installation.
With Fully Cloud EMM you can trigger the APK file install/upgrade for many devices at once. Now you can also host your APK files on the File Storage in Fully Cloud.
Note that you can’t downgrade the app without uninstalling it.
You can see the results of background app install commands in Fully Kiosk Log on the Remote Admin. Starting Fully Kiosk 1.50.3 installing and uninstalling APK files is not available if you installed Fully Kiosk from Google Play.
When updating the Fully Kiosk app itself it will be stopped. The kiosk protection will be lost for this moment. Fully Kiosk app will be restarted automatically after the update if you have Restart Fully After Update option enabled in Other Settings.
Can I see/control my device screen remotely?You can get a screenshot of the device screen in Remote Admin. Note that other apps and videos won’t be visible on that screenshot.
For remote screen sharing with an particular device you can use the Anydesk Remote Control app. For silent access you can configure the Anydesk app to Never show incoming session requests and Enable unattended access with password. If you run Fully in Kiosk Mode you have to add the following activity to the App Whitelist otherwise Fully will kill the screen recording request.
com.android.systemui/com.android.systemui.media.MediaProjectionPermissionActivity
You can force the Android to bypass the screen recording dialog and resolve some other issues as described in this manual in order to have a silent integration. Also check the Disable Screenshots option is switched off in Kiosk Mode Settings and in KNOX Settings.
For configuring Fully Kiosk app and configuring devices we highly recommend you using Fully Cloud where you can do it for many devices with only few clicks.
Why did you stop Android 4.4 support?Android 4.4 devices are just unsafe as there is no built-in support for TLS 1.2. This makes all network communication of the device spoofable. Keeping support for these devices by our servers is potentially insecure. Thatswhy we stopped supporting Android 4.4 by the end of the year 2021.
The last app releases working with Android 4.4 are Fully Kiosk Browser 1.44.1, Fully Single App Kiosk 1.8 and Fully Video Kiosk 1.8. Newer releases don’t support Android 4.4 and can’t be installed at all. If your devices get updates by Google Play they will not get any Fully Kiosk updates anymore. You can keep using older versions, of cause, with all PLUS features. However you can’t activate/deactivate a PLUS license or use Fully Cloud with those devices anymore.
Please be aware of the security and other issues in the old Android versions and the totally outdated Android Webview. We recommend an upgrade to some newer devices.
Can you recommend a good/cheap device for Fully Kiosk?Nope. The devices change on the market every 3-4 weeks. We can’t test them all. And of cause, we don’t test. There are also big quality differences even inside each brand or price segment. Please attend to the known issues and select a device according to your budget, quality and performance requirements. If you plan to show websites check that the Webview available on the device is up-to-date or can be updated by yourself. Please test the Fully Kiosk app with your devices and your contents thoroughly prior to deployment. Report any issues to info@fully-kiosk.com
Can I use Android Go devices with Fully Kiosk?Android Go devices with Android 10+ have some serious restrictions. Kiosk mode, visual motion detection and all features requiring the draw on top of other apps permission don’t work with Android Go Edition running Android 10+.
As a workaround you can grant this permission using ADB with following command:
adb shell pm grant de.ozerov.fully android.permission.SYSTEM_ALERT_WINDOW allow
For Fully Single App Kiosk use com.fullykiosk.singleapp, for Fully Video Kiosk use com.fullykiosk.videokiosk, for Fully Kiosk Browser Deployment edition use com.fullykiosk.emm instead of de.ozerov.fully in this command.
Users reported that this workaround has no effect on some devices with Android 12+.
Can I use Android TV devices with Fully Kiosk?Android TV is a feature reduced version of Android OS for large devices. The features are cut arbitrarily without a proper documentation and the resulting restrictions can change in an unpredictable way across different devices and Android TV versions.
You can use the long press on the back button to open the menu instead on swiping.
Disabling the Home Button in Kiosk Mode is impossible out-of-the-box on the most Android TV devices. You can however run the kiosk mode “light” where the home button is not locked. If your device is not touchscreen and you hide the remote this might be a sufficient protection.
Workaround for Home Button Lockdown with Android TVThis workaround currently only works with Fully Video Kiosk 1.10+ and Google compliant Android TV devices. Please try it on your own risk if you know what you do. We can’t provide any support. Note that these settings could be reverted by the next Android TV update.
1. Download and install the Android Debug Bridge (ADB) tools for Windows, Mac or Linux on your PC
2. On the tablet navigate to Settings >> Device Preferences >> About , and keep tapping on the Build Number until the “You are a developer” popups.
3. Go to the Settings >> Device Preferences >> Developer Options, and enable the switch at the top to the ‘On’ position. Scroll down to the Debugging section, and switch USB Debugging to on. Now you can use ADB with your Android TV. Plug it into your PC with any USB cable.
4. Enable Unlock All Android TV Features, restart app, enable Kiosk Mode and enable Disable Home Button and proceed to enabling the Kiosk Mode. After enabling the Kiosk Mode in Fully Kiosk run following commands on the PC in your ADB folder. This will set Fully Kiosk as the new home app.
adb devices
adb shell pm set-home-activity com.fullykiosk.videokiosk/.LauncherReplacement
adb shell pm disable-user --user 0 com.google.android.tvlauncher
5. When you want to disable the kiosk mode after disabling the Kiosk Mode in Fully Kiosk run following commands in order to return back to the default Android TV Launcher.
adb shell pm enable --user 0 com.google.android.tvlauncher
adb shell pm set-home-activity com.google.android.tvlauncher/.MainActivity
On some Android TV devices also the Launch on Boot option doesn’t work and other restrictions may apply. Try using the Grant All Permissions button or using the workaround for Android Go device in this case to grant the Draw on Top permission.
On some Android TV devices Fully Kiosk can't show fullscreen or in the correct orientation. This is something we can't fix currently.
Can I use Fully Kiosk with an Amazon Fire device?Amazon's Fire OS is a very special Android derivative. We absolutely can't recommend using Fire OS devices in any production environment as Amazon seems to be hunting apps overriding the standard launcher. Showing you advertising whenever possible is one of the reasons why Fire OS devices are cheaper than usual. So even if Fully Kiosk is working fine for now make sure your device will never get an Fire OS update where anything will be broken. You've been warned.
Please install Fully Kiosk apps on Fire OS from APK files on our website. Fully Kiosk Browser, Fully Video Kiosk and Fully Single App Kiosk allow enabling the Kiosk Mode with Fire OS without any third party tools. It has been tested with some Fire OS 5, 6 and 7 devices. However even the minor Fire OS change can have effects.
Please uninstall apps like Launcher Hijack. If you have Google Play on your device please don't install Fully Kiosk apps from Google Play and disable auto-updates for the Fully Kiosk app.
When enabling Kiosk Mode in Fully Kiosk please read the dialog box text carefully and enable the Detect Home Button option in Fire OS Accessibility Settings. This is required to make the kiosk protection with Fire OS. Note: This accessibility option is sometimes reset by Fire OS - no idea why, you will get a warning toast when Starting Fully Kiosk in this case. If the Advanced Kiosk Protection is enabled, your device is probably still 98% protected in that case.
Due to changes in the accessibility service the Fire OS edition of Fully Kiosk Browser will always be an APK file to install. You can get it in the download box. It won't be accessible on Google Play as Google doesn't like apps tampering with accessibility service. Amazon store didn't like our apps for unknown reasons, so our app can't be made available there.
Major Issues with Fire OS reported by users:
1. Fire OS 5 (after update to 5.3.7.0 or 5.6.9.0), Fire OS 6 and Fire OS 7 takes some seconds (usually 5 seconds) to return to Fully Kiosk when the Home Button is pressed. If you plan to make an OS upgrade or obtain new Fire OS devices please check if this issue appears.
Workaround for Fire OSPlease use this workaround on your own risk if you know what you do. We can’t provide any support. Note that these settings could be reverted by the next Fire OS update.
1. Download and install the Android Debug Bridge (ADB) tools for Windows, Mac or Linux on your PC
2. On the tablet navigate to Settings >> Device Options > About Fire Tablet, and keep tapping on the Serial Number until the “You are a developer” popups.
3. Go to the Settings >> Device Options >> Developer Options, and enable the switch at the top to the ‘On’ position. Scroll down to the Debugging section, and switch USB Debugging to on. Now you can use ADB with your Fire tablet. Plug it into your PC with any USB cable.
4. After enabling the Kiosk Mode in Fully Kiosk run following commands on the PC in your ADB folder. This will set Fully Kiosk as the new home app.
adb devices
adb shell pm set-home-activity de.ozerov.fully/.LauncherReplacement
adb shell pm disable-user --user 0 com.amazon.firelauncher
5. When you want to disable the kiosk mode after disabling the Kiosk Mode in Fully Kiosk run following commands in order to return back to the default Fire Launcher.
adb shell pm enable --user 0 com.amazon.firelauncher
adb shell pm set-home-activity com.amazon.firelauncher/.Launcher
2. After update to Fire OS 5.6.6.0 or 5.7.0.0 the Fully Kiosk app stops working if Visual Motion Detection is active and the screen goes off. It looks like this Fire OS is killing all apps that use the camera while screen is off. We have no fix for this. Use the Screensaver instead of Screen Off or use the Acoustic motion detection.
3.There is a bug in the newer Fire OS 7.3.1.5+ that the granted microphone access permission gets lost sometimes. You can deny this permission as workaround. The depending features in Fully Kiosk like Acoustic Motion Detection of cause won't work.
4. The Kiosk Mode can have other serious issues with Fire OS. You've been warned.
5. The Lock Screen can't be disabled on many Fire OS devices. The Screen Off Timer, Sleep Schedule or the short Power Button press will always lead to the lock screen. All this is no issue with normal Android OS. Another ROM or rooted Fire OS can help you. Some users reported successful screen lock removal in Fire OS according to this manual (based on this approach). Other users reported that this approach reverts randomly unless you disable the access to any networks except required (e.g. by VLAN configuration). Other users reported successfull lock screen deactivation by using the screen pinning.
The Unlock Screen option is available for some Fire OS 6 and Fire OS 7 based devices. But it still doesn't work 100% as after device reboot sometimes you still have to swipe to unlock. Also the keyboard may not appear until you press the home button if the Unlock Screen is enabled.
6. The Android Webview can't be updated separately, but it seems to be updated with Fire OS and is slightly outdated with Fire OS we tested.
7. Some users reported to be impossible to use Alexa and the Show Mode when Kiosk Mode is activated.
8. Some users reported screen brightness issues where the brightness is not set/reset properly when using the brightness settings in Fully Kiosk. If you encounter this issue please check that Keep Screen On option is enabled in Fully Kiosk. Otherwise Android screen off can mess up things. Avoid using Screensaver Brightness option if you still have brightness issues.
9. Add to Home feature isn't working with the standard Fire OS launcher.
10. It looks like there is no device provisioning method working with Fire OS and so there is no way to make a silent remote app installations (unless the device is rooted).
11. Some devices like Echo Show can't grant the requested app install permission and show the permission request repeatedly. You can deny this permission request permanently by downloading and importing this JSON settings file.
12. Some Echo Show devices display the limited touch functionality warning.
13. The Dark Mode doesn't work even if the device is on Android 9.
If you find some issues with the Fire OS please feel free to report to info@fully-kiosk.com and let's see what we can do.
Fire TV sticks seem to work with Fully Kiosk (with the restrictions above) however you can't get them into the kiosk mode and some different restrictions apply as for other Android TV devices. You can try to switch off the Disable Home Button option and run in the kiosk mode "light" where the home button is not locked. If your device is not touchscreen and you hide the remote this might be a sufficient protection. App icons for sideloaded apps are broken on some Fire TV devices.
We are glad to offer you customized or white label version of any of our Fully Kiosk apps for your individual or business needs. You will get a custom app as APK file for your installation.
Please contact us with your requirements for details and prices.
All Fully Kiosk apps do not track users. No information about Fully Kiosk apps usage including their local Remote Admin web interface is transmitted to or stored on our servers or third party servers.
If you are using the PLUS features the app checks periodically the PLUS license validity if the Internet connection is available. The anonymous device ID will be sent via HTTPS to our licensing servers for this purpose.
If you order a PLUS License the device ID, the payment transaction details, your name, address and email will be stored in order to enable authentication in case of license relocation.
If you are using our Fully Cloud service your device will frequently send all information available on the Fully Remote Admin interface (including the device location if enabled) to Fully Cloud server via HTTPS. The latest information will be saved for the quick view in the Fully Cloud account. No history data (except Fully Log) will be saved on our cloud servers. Fully Cloud is hosted at Hetzner Online (ISO/IEC 27001 certified hosting) in Germany.
In case of application crash or ANR the anonymous information about your device type, Android version, Fully version, its major settings, logcat and exception stack will be sent to our servers via HTTPS in order to support investigation and fixing that bug.
If you save your configuration with Fully Exam Configurator the exam name, URL and encrypted configuration will be saved on our servers for 12 months in order to provide the permalinks.
When paying by credit card the processing is done by PayPal or Stripe.com. We can’t access and we don’t save your credit card data at any time except the country of your credit card.
When using Enterprises you also accept the Google Managed Play agreement and data processing and security terms.
Developer information and privacy point contact:
Fully Factory GmbH
Von-Witzleben-Str. 12
41540 Dormagen
Germany
In case of any privacy questions or requests please contact us.
UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
German substantive law shall apply to the agreement. Consumer protection law of the consumer’s residence country shall be excluded.
Using Fully PLUS features requires a Fully PLUS License. Look at PLUS Licensing for conditions. Fully PLUS Single License can be paid by PayPal or Google Play in-app purchase (if installed from Google Play). Fully PLUS Volume License can be paid by credit card, bank transfer or PayPal.
Using Advanced Features in Fully Cloud EMM additionally requires a Fully Cloud Subscription after trial period. Look in Fully Cloud for conditions. You can pay by PayPal subscription. For 20+ devices we can offer a bank transfer or credit card payment.
You can test anything for free. For all product orders you will get a digital invoice. We require all international bank transfers to us to be made with the OUR instruction (all fees are paid by you).
Fully Kiosk uses code of Jsoup, FreeReflection and ANRWatchdog published under MIT License.
Fully Kiosk uses code of Glide published under this license.
Fully Kiosk uses code of nanohttpd published under this license.
Older Fully Kiosk version use code of Eclipse Paho published under EPL.