【问题标题】:Kiosk mode for Chrome or Firefox适用于 Chrome 或 Firefox 的 Kiosk 模式
【发布时间】:2016-07-13 18:49:56
【问题描述】:

我需要为许多 Android 设备编写一个自助服务终端启动器。它应该启动 Chrome 或 Firefox,全屏显示特定网页。该页面已经调用了HTML5 requestFullScreen() API,但它不起作用,因为该调用不是来自用户生成的事件,因此不是来自gets declined by a browser for security reasons

我做了一些searching,我发现了以下问题:

这两个答案最终都指向现有的应用程序或浏览器,其中一些正在做我想要完成的事情。这感觉有点矫枉过正,因为我已经在使用一个应用程序来完成这件事。而且我不能使用像建议的here 这样的特殊浏览器,因为 Firefox 或 Chrome 等主流浏览器在更新和支持的功能方面更可靠。

但与此同时,这些应用程序的存在意味着我需要做的任何事情都是可行的。来自Kiosk Browser Lockdown

[专业功能]

全屏模式/隐藏工具栏

我的问题是:他们使用哪些 Android API 来完成此任务?在这一点上我有什么遗漏吗?我应该寻找哪些文档页面、指南或文章?

谢谢

【问题讨论】:

    标签: android firefox kiosk-mode chrome-for-android


    【解决方案1】:

    我对在 linux 系统或 windows 操作系统中运行的商业应用程序有类似的问题。此应用程序可在浏览器中运行。 过去,我们打开了一个自定义的浏览器窗口。并关闭主窗口。 : *隐藏菜单栏。 *隐藏按钮栏。 * 保持关闭/降低窗口按钮

    不能使用全屏模式,因为它隐藏了窗口按钮。

    今天,将出现越来越多的基于浏览器的应用程序(angularjs 和类似的应用程序即将出现......)。

    我发现 Atom 应用程序可以做到这一点,使用 chromium 。

    这是否意味着我必须在我的应用程序设置中嵌入网络浏览器??? 并坚持使用一些浏览器(例如铬),尽管我的应用程序与许多兼容。

    【讨论】:

    • 经过一番研究,我发现在一些浏览器上存在“应用模式”。历史上,Firefox 有 Prism 和 Mozilla chromeless。这已被弃用.... chromium 有一个“应用程序模式”,如果你在 cmdline 上使用 --app 开关运行它。我在这里找到了一些开关peter.sh/experiments/chromium-command-line-switches
    【解决方案2】:

    您是否必须 100% 使用 Chrome 或 Firefox?

    通过使用仅显示您要显示的网页的自定义 WebView 开发一个自助服务终端应用程序,可以更轻松地执行您所说的操作。我可能错了,但我相信 Android 上的 WebViews 在技术上是后端的 Chrome(或类似的东西),但无论哪种方式,我怀疑你需要担心更新。然而,这不是你问的......所以我将描述一个使用 Chrome 或 Firefox 的解决方案。我的解决方案还意味着您需要访问正在加载软件的设备,而不是商业应用程序,因为您需要 ADB。

    完全可以在 Android 中设置 Kiosk 应用程序以仅允许使用 Chrome 或 Firefox,如果您将加载到设备上的应用程序(执行任何您需要的任务)设置为设备,这很容易完成所有者。这很容易通过 ADB 使用命令提示符或 Android Studio 终端来完成。

    仅供参考...我不肯定在没有设备所有者权限的情况下可以设置“真正的”信息亭应用程序,如果没有它,您实际上无法将应用程序锁定到屏幕上。在我描述的情况下,您可以使用设备所有者获得真正的 Kiosk 实施,而不是像您在市场上看到的大多数应用程序那样模仿该功能的漂亮工作,但是,我也敢打赌这些应用程序具有某种类型设备管理员权限,不如设备所有者强大,但仍然强大。

    我描述的“真实”方式将通过 ADB(或命令行)使用与以下命令类似的 sn-p 来完成(我在最近的企业应用程序中使用了这个,看起来与您所描述的非常相似) :

    adb shell dpm set-device-owner 
    com.viatechsystems.guestservices/android.app.admin.DeviceAdminReceiver
    
    • 您可以将“com.viatechsystems.guestservices”替换为您的 Kiosk 应用程序的包名称。一旦通过 ADB 设置了设备所有者,您将在控制台上收到一条确认消息,但要意识到如果已经通过其他方法设置了设备所有者,则此命令可能会失败。要解决该问题,请重置您的设备并再次尝试该命令,您应该一切顺利。

    至于在设置设备所有者后将您的应用程序(或者在您的情况下是 Chrome 或 Firefox,只需找出包名称的第一个)锁定到 Kiosk 模式,您需要运行这个 sn-p 或类似的东西它,在您的应用程序的主要活动中:

    DevicePolicyManager DPM = 
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
    
    ComponentName ownerName = new 
    ComponentName(WHATEVER_CLASS_YOU_USE_TO_DISABLE_APPS.this 
    DeviceAdminReceiver.class);
    
    //this.getPackageName() GETS CURRENT PACKAGE
    String[] packages = {
    //THIS IS CURRENT APP
    this.getPackageName()
    //YOU NEED TO USE CHROME OR FIREFOX PACKAGE 
    //NAME HERE INSTEAD FOR WHAT YOU WANT
    };
    DPM.setLockTaskPackages(ownerName, packages);
    startLockTask(); //LOCKS PACKAGES IN KIOSK MODE
    

    现在应该可以满足您的需要,但是在我最近的应用程序的案例中,我还需要确保如果用户以某种方式退出 Kiosk 模式(从技术上讲,这在重新启动时是可行的,即使实现了启动侦听器),他们只能打开我想要的应用程序,没有别的。

    为此,您需要隐藏/禁用具有设备所有者权限的应用程序,您之前将自定义应用程序设置为锁定 Chrome、Firefox 或任何您想要进入 Kiosk 模式的设备。

    我可以告诉你如何在加载应用程序的设备上找到所有包名称,但我猜你可以弄清楚...提​​示如果你有问题,你可以使用 Android 的包管理器。

    在这种情况下,我们要隐藏的包/应用程序是“com.example.HideThisPackage”,只需将其替换为您希望作为设备所有者隐藏/禁用的任何包名称。

    //THIS VARIABLE AGAIN
    DevicePolicyManager DPM = 
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
    
    //THIS VARIABLE AGAIN
    ComponentName ownerName = new 
    ComponentName(WHATEVER_CLASS_YOU_USE_TO_DISABLE_APPS.this 
    DeviceAdminReceiver.class);
    
    //USED TO HIDE INSTALLED APPS AFTER DEVICE OWNER ENABLED
    DPM.setApplicationHidden(ownerName, com.example.HideThisPackage, true);
    

    那么你应该很高兴,如果你需要任何额外的指针,请告诉我,但我使用几乎完全一样的代码来完成你几个月前所描述的事情。

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 2013-11-14
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2014-10-24
      • 1970-01-01
      相关资源
      最近更新 更多