RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 669577
Accepted
Kunoichi
Kunoichi
Asked:2020-05-23 16:20:10 +0000 UTC2020-05-23 16:20:10 +0000 UTC 2020-05-23 16:20:10 +0000 UTC

防止应用程序退出(Kiosk 模式)

  • 772

您需要在“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

java
  • 6 6 个回答
  • 10 Views

6 个回答

  • Voted
  1. eugeneek
    2020-05-23T22:09:55Z2020-05-23T22:09:55Z

    看起来你需要Single-Purpose Devices. 设置单用途设备官方文档

    还有一篇俄语文章,其中包含关于用户与Android 设备 Kiosk 模式应用程序交互的限制的各种技巧

    据我所知,您可以在 Xamarin 上使用任何本机 API。所以我不认为这应该是一个问题。

    • 5
  2. Igor SKRYL
    2020-05-29T15:42:54Z2020-05-29T15:42:54Z

    Kiosk 模式不是全屏,而是底部和状态栏的完全遮挡。那么除了使用程序的功能之外,用户真的无法做任何事情(当然,除非程序抛出错误)。

    我不得不制作这样一个程序,但它被 Android Studio 工具使用,而不是 Xamarin。您可以将其作为一个函数来执行:

    private void hideBar(){
    try
    {
        Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 42 s16 com.android.systemui"}); 
        proc.waitFor();
    }
    catch(Exception ex)
    {
        Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
        Log.e("ROOT ERROR", ex.getMessage());
    }
    

    }

    或通过shell:

    adb shell
    su 
    pm disable com.android.systemui //(enable) чтобы включить обратно
    

    或许以下命令将帮助您使用 Xamarin 实现预期的结果。

    根据个人经验,我建议您创建在您退出应用程序时出现的浮动系统控制按钮(至少是“返回”)。如果应用程序崩溃或您需要更改设置中的某些内容,则不必重新打开.systemui它。

    • 3
  3. phil
    2020-05-23T17:01:02Z2020-05-23T17:01:02Z
    @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
          return true;
        }
        return false;
      }
    

    可能是这样?

    • 0
  4. McDaggen
    2020-05-30T20:14:19Z2020-05-30T20:14:19Z

    不幸的是,没有时间阅读您所有的评论,但根据我的阅读,我认为您只是在阻止下拉面板方面遇到了问题。尝试添加行:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
    
        setContentView(R.layout.activity_main);
    

    嗯,那就看官方文档

    • 0
  5. user194625
    2020-07-27T22:36:45Z2020-07-27T22:36:45Z

    要阻止状态栏的打开(类似于 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(关闭状态栏)

    input swipe 0 100 0 0
    

    也就是说,我们沿着 Y 从 100 从上面滑动到零。是否可以在某种循环中执行此操作(?)

    我没有想法了

    • 0
  6. Best Answer
    Kunoichi
    2020-08-02T16:58:38Z2020-08-02T16:58:38Z

    我用根目录下的自定义快速设置应用程序和命令关闭了状态栏:

    settings put secure user_setup_complete 0
    settings put global device_provisioned 0
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5