您需要在“Kiosk 模式”下运行 android 应用程序。用户不能关闭或最小化应用程序以及进入设备设置是必要的。
任务是申请审查。它将在客户可用的平板电脑上运行。
为了实现我的目标,我已经完成了以下工作(使用 Xamarin):
我将应用程序作为启动器启动并将应用程序扩展到全屏:
[Activity(Label = "App1", MainLauncher = true, Icon = "@drawable/icon", Theme = "@android:style/Theme.Light.NoTitleBar.Fullscreen")] [IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { Intent.CategoryHome, Intent.CategoryDefault })]使后退按钮事件处理程序为空:
public override void OnBackPressed(){}
现在用户可以使用通知栏和主页按钮以及后退按钮。访问主页和后退按钮并不可怕,因为主页按钮将用户返回到应用程序,并且无法从任务菜单关闭启动器(此应用程序)。
有必要屏蔽通知面板或使其几乎无法使用(这样用户就无法进入设置、关闭 Wi-fi 等)。有根对。
您不能使用电工胶带、无色清漆、破坏触摸屏和其他硬件方法来阻止对通知面板的访问。
添加 1
使用以下代码会导致屏幕完全关闭,直到重新启动。也许如果命令只是禁用状态栏?
Java.Lang.Process proc = Java.Lang.Runtime.GetRuntime().Exec(
new String[] { "su", "-c", "service call activity 42 s16 com.android.systemui" });
proc.Wait();
补充2
使用全屏和隐藏系统栏(全屏)程序时,程序不显示。仅显示桌面图片,直到重新启动才显示其他任何内容。平板电脑 Prestigo multipad weze 3341 3g (PMT 3341_3G),android 5.1.1
看起来你需要
Single-Purpose Devices. 设置单用途设备官方文档还有一篇俄语文章,其中包含关于用户与Android 设备 Kiosk 模式应用程序交互的限制的各种技巧
据我所知,您可以在 Xamarin 上使用任何本机 API。所以我不认为这应该是一个问题。
Kiosk 模式不是全屏,而是底部和状态栏的完全遮挡。那么除了使用程序的功能之外,用户真的无法做任何事情(当然,除非程序抛出错误)。
我不得不制作这样一个程序,但它被 Android Studio 工具使用,而不是 Xamarin。您可以将其作为一个函数来执行:
}
或通过
shell:或许以下命令将帮助您使用 Xamarin 实现预期的结果。
根据个人经验,我建议您创建在您退出应用程序时出现的浮动系统控制按钮(至少是“返回”)。如果应用程序崩溃或您需要更改设置中的某些内容,则不必重新打开
.systemui它。可能是这样?
不幸的是,没有时间阅读您所有的评论,但根据我的阅读,我认为您只是在阻止下拉面板方面遇到了问题。尝试添加行:
嗯,那就看官方文档
要阻止状态栏的打开(类似于 SetupWizard) ,您需要调用
disable.android.os.StatusBarManager如果您需要对所有机器人的支持,那么您将不得不爬取源代码,因为该方法可能有不同的版本。好像他们说它将生成SecurityException要求在清单中的状态栏上设置权限。当然,这不会改变任何东西,在安装过程中的日志中会写到此权限仅适用于系统应用程序。如果有权利的根源 - 它不会改变任何东西。原则上,你可以将应用转移到system/app,但除此之外,应用必须使用系统证书进行签名,这几乎是无法识别的。但是有一个出路:CyanogenMod(Lineage)上的闪存设备 - 有一个开放的系统密钥,但我没有找到关于这个主题的任何信息。
作为一种选择,你 可以把Xposed Framework + BusyBox模块放在设备上,100%它有屏蔽状态栏(或一般隐藏)或其他模块的功能,或者自己写,Xposed Framework在github上.
更多的? 可能很愚蠢,但仍然如此。当您启动应用程序时,重命名 system/app/SystemUI.apk(或移动(或更改权限))并更新 GUI,当您关闭(+打开设备(突然坐下))时恢复 ..
+ 我不知道这是否可能。制作一个全屏应用程序,
onTouchEvent以防万一action = MOVE(用户移动他的手指)关闭状态栏(方法collapsePanels(如)——这可以不受任何限制地完成。PS无论如何,在UC浏览器中,在观看视频时,如果您打开状态栏,则视频暂停,这意味着您可以将听众置于扩展状态(有全屏,滑动显示幕布停止视频)。
++ 而不是使用反射,你可以使用一个shell(关闭状态栏)
也就是说,我们沿着 Y 从 100 从上面滑动到零。是否可以在某种循环中执行此操作(?)
我没有想法了
我用根目录下的自定义快速设置应用程序和命令关闭了状态栏: