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

标签 android reset android-8.0-oreo kiosk-mode safe-mode

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

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

  1. 在设备的正常模式下仅向学校学生显示特定应用。这可以通过禁用默认启动器并启用 kiosk launcher 来实现。 .

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

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

我已经解读了这些要求并得出了以下详细理解。

  1. 我们可以重新设计学生应用程序,使其成为一个将在信息亭模式下运行的启动器应用程序。这意味着我们将不需要任何其他(试用版)启动器应用。

  2. 我们可以通过 AppLock 禁用对系统或第三方应用程序的安全模式访问。应用程序或类似的其他应用程序。它仅适用于 Android Marshmallow 6.0。但是有一个 Android 强加的限制——它不能在 Nougat/Oreo 设备上运行。或者,我们尝试处理电源按钮按键以防止设备进入安全模式。但是 Android 不允许根据 this link 从我们的应用程序访问或监听电源按键。以及其他各种。

Android 7.0 (NOUGAT) 和 8.0 (OREO) 的重要说明 - link here

根据 MMGuardian App , 目前安卓7.0或8.0手机无法开启安全模式锁。如果以前启用了安全模式锁定的旧手机更新到这些版本的 Android,安全模式锁定功能将被禁用。

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

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

我的方向是否正确?或者我是否详细说明了它?

最佳答案

100% 的 Kiosk 模式是不可能的。

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

我有解决方案,但只有在设备已 root 时才有效

限制硬重置:将您的 apk 文件复制到 system/app,当设备恢复后,Android 将自动重新安装 system/app 中的所有应用>文件夹

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

pm disable <package name>


解释音量键:要运行这个你不需要root权限,在你的 Activity 类中使用这个代码

@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;
}

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

 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();
    }
}

恢复正常

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();
    }
}

注意:运行shell命令后设备会重启

Your playing with root, so you and your own, If any doubt please command before start coding

关于android - 如何在 Kiosk 模式下运行 Android 应用程序,禁用安全模式并防止设备硬重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303406/

相关文章:

Javascript 计时器算法帮助,做一次,然后 clearInterval

android - Android Oreo 的后台位置更新在 2 小时后停止

android - NDK 需要 gnuSTL_static std::string 而不是 std::_ndk1::string

android - Swift 中的 Base64 编码不会在 Android 中解码

android - 9 补丁可绘制行为糟糕,奇怪的 Artifact - 这里出了什么问题?

android - 如何在 Android TV 应用程序中设置画中画 (PiP) 的位置?

android - Aws SDK 2.12.3 TransferService 使用

android - 为什么正常的图片分配了很多内存?

jquery - 如何使用 jQuery 设置输入框的默认值?

javascript - 在确认框中单击“确定”后如何重置表单?