我正在评估是否以及如何移植CF .NET企业应用程序以在Android设备上运行 . Windows Mobile手机上的应用程序以kiosk模式运行,其中应用程序在启动后以全屏模式自动启动,并且用户无法意外或自愿访问手机的任何其他部分 .
Is it possible on Android to have only one application autostart after booting and prevent users from accidentally (or willingly) access any other parts of the Android device?
10 回答
您可以通过侦听BroadcastReceiver中的
android.intent.action.BOOT_COMPLETED
intent并从那里启动Activity来自动启动应用程序 . 在活动中,您可以将自己注册为新的默认主屏幕[1]并处理密钥 .我认为有些情况下你无法在不修改框架的情况下处理(例如在Home上显示longpress以显示当前活动的应用程序) - 但我也可能会弄错 .
但对于一个可能足够的原型 .
玩得开心修补!
[1]:
您可以自定义此选项(禁用对菜单的访问,限制应用程序添加等)以启用自助服务终端 . http://code.google.com/p/android-launcher-plus/
在新的Android L预览版中,谷歌宣布Task Locking,就是这样 . 但它似乎确实需要root .
经过一段时间的搜索,我找到了一个很好的解决方案 . 这只适用于root设备,但我想如果只是这个应用程序,那么生根应该不是问题 .
你的意图过滤器
确保您的应用折叠工具栏,以便无法访问通知栏,请参阅How to disable status bar / notification bar on android programmatically?或http://blog.vogella.com/2011/02/28/android-hidding-the-status-and-title-bar/
然后,为了阻止任何其他程序错误地打开,请使用辅助功能服务检查窗口状态已更改,将程序包与白名单或黑名单进行比较,如果不运行则使用ActivityManager.killBackgroundProcesses进行终止 .
另外,请查看http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/
Set up Single-Purpose Devices Page的android开发者已经描述了这些东西,你可以从那里轻松了解更多的东西 .
现在很容易将 Android 6.0 Marshmallow and later 设备配置为公司拥有的一次性(COSU)设备 .
在forum post中找到了另一种可能的技术 . 引用该帖子:
http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/10839-android-kiosk-mode-tutorial.html
似乎也有example kiosk-mode code ZIP file available for download .
启动时启动应用程序
实现此目的的最佳方法是将您的应用程序设置为启动器
锁定您的应用
最可靠的方法是使用Lollipop或更高版本的设备并使用
首先你必须将您的应用设置为设备所有者 . 注意,您的设备必须取消设置:如果您已注册,则应重置工厂并跳过帐户注册 .
为了能够注册您的应用程序,您必须首先设置DeviceAdminReceiver组件:
一旦你有一个未设置的设备,你可以从adb( no root required )启动以下命令
为了避免android询问用户固定你的应用程序的权限你必须调用setLockTaskPackages
最后!
谷歌最近发布了Android Management API,它允许为运行Android 5.1或更高版本的任何Android设备轻松设置信息亭模式,还可以设置各种其他策略 .
Xposed framework 可以做到这一点 . 它需要root,并且它可能无法在所有平台上运行 . 在类 android.app.StatusBarManager 中查找 disable() 方法 .
Here in Android source code
看看如何编写自己的模块:Xposed development tutorial
这比你初看起来容易得多 . 祝好运!
除了使用BOOT接收器设置应用程序,以及this answer以防止状态栏扩展,此解决方案适用于4.4及更高版本作为完整的自助服务终端应用程序:
放在你的onCreate()中:
这将完全隐藏后退按钮,应用程序和主页按钮 .