如何在Kiosk模式下运行Android应用程序,禁用安全模式并阻止设备进行硬重置?

ket*_*kar 10 android reset safe-mode kiosk-mode android-8.0-oreo

如何在Kiosk模式下运行Android App,禁用安全模式并阻止设备进行硬重置?

我对我的应用有以下3个要求:

  1. 在设备的正常模式下仅向学生显示特定应用程序.这可以通过禁用默认启动器和启用自助服务终端启动器来实现.

  2. 禁用或将密码设置为安全模式,以避免使用系统应用程序或内置应用程序(youtube,视频播放器,音乐应用程序等).

  3. 通过禁用长按设备的硬键(电源按钮,音量按钮)来限制设备的硬重置.

我已经解释了这些要求,并提出了以下详细的理解.

  1. 我们可以重新设计学校学生应用程序,使自己成为一个将在自助服务终端模式下运行的启动器应用程序.这意味着我们不会要求任何其他(试用版)启动器应用程序.

  2. 我们可以通过AppLock应用程序或类似的其他应用程序禁用对系统或第三方应用程序的安全模式访问.它仅适用于Android Marshmallow 6.0.但是有一个Android限制 - 它不适用于Nougat/Oreo设备.或者,我们尝试按下电源按钮按键以防止设备进入安全模式.但Android不允许根据此链接和其他各种方式从我们的应用程序访问或收听电源按键.

ANDROID 7.0(NOUGAT)和8.0(OREO)的重要说明 - 请点击此处链接

根据MMGuardian应用程序,目前无法为在Android 7.0或8.0上运行的手机启用安全模式锁定.如果之前启用了安全模式锁定的旧手机更新为这些版本的Android,安全模式锁定功能将被禁用.

  1. 我们无法阻止任何设备进行硬重置,因为它主要是在手机关机后完成,让应用程序无法控制.但是有一个昂贵的选择.我们可以使用COSU设备并设计自定义固件.有关COSU的更多详细信息,请访问以下链接. https://developer.android.com/work/cosu.html https://developers.google.com/android/work/requirements/cosu

有人可以帮我添加更多想法让我更详细地了解这种情况吗?

我正朝着正确的方向前进吗?或者我是否正确详细说明了?

Anu*_*tin 5

100% 自助服务终端模式是不可能的。

限制硬重置:硬重置选项是引导加载程序的一部分,因此很难防止设备恢复出厂设置,

我有解决方案,但只有在设备扎根时才有效

限制硬重置:将您的 apk 文件复制到系统/应用程序,当设备恢复时,Android 将自动重新安装系统/应用程序文件夹中的所有应用程序禁用系统应用程序

禁用系统应用程序或任何应用程序运行 shell 命令

pm disable <package name>
Run Code Online (Sandbox Code Playgroud)


解释音量键:要运行它,您不需要 root 访问权限,在您的活动类中使用此代码

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    // TODO Auto-generated method stub
    if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN))
    {
        // Do what ever you want
    }
    if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP))
    {
        // Do what ever you want
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

奖金禁用导航​​栏和状态栏
隐藏

 private void hideNavigationBar(){
    try {
        Process process = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(process.getOutputStream());
        os.writeBytes("pm disable com.android.systemui\n");
        os.flush();
        try {
        Process process = null;
        process = Runtime.getRuntime().exec("su");
        DataOutputStream osReboot = new DataOutputStream(process.getOutputStream());
        osReboot.writeBytes("reboot\n");
        osReboot.flush();
        process.waitFor();
            } 
            catch (IOException e) {
                e.printStackTrace();
            } 
            catch (InterruptedException e) {
                e.printStackTrace();
            }

    }catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

恢复正常

private void showNavigationBar(){
    try {
        Process process = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(process.getOutputStream());
        os.writeBytes("pm enable com.android.systemui\n");
        os.flush();
        os.writeBytes("reboot\n");
        os.flush();
        process.waitFor();

    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:设备将在运行 shell 命令后重新启动

你在玩root,所以你和你自己,如果有任何疑问,请在开始编码之前命令


And*_*nko 4

看看Android Management API,似乎没有自定义设备固件就无法完成更多工作。