适用于Chrome或Firefox的Kiosk模式

时间:2016-03-25 23:17:34

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

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

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

这两个答案最终都指向现有的应用程序或浏览器,其中一些正在完成我正在努力完成的任务。这感觉就像是一种矫枉过正,因为我已经在使用应用程序来实现这一目标。我不能使用像建议here这样的特殊浏览器,因为Firefox或Chrome等主流浏览器在更新和支持的功能方面更可靠。

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

  

[专业功能]

     

全屏模式/隐藏工具栏

我的问题是:他们使用什么Android API来实现这一目标?在这一点上有什么我想念的吗?我应该寻找哪些文档页面,指南或文章?

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

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

我发现Atom Application可以使用铬来做到这一点。

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

答案 1 :(得分:0)

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

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

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

仅供参考...我并不乐意设立一个真实的' Kiosk App可以在没有设备所有者权限的情况下实现,如果没有它,您实际上无法将应用程序锁定到屏幕上。在我描述的情况下,你使用设备所有者获得真正的Kiosk实现,而不是模仿像你在市场上看到的大多数应用程序那样的功能,但是,我也打赌那些应用程序有某种类型的设备管理员权限,它不如设备所有者强大,但仍然很强大。

真实的'我描述的方式将通过ADB(或命令行)完成,其中包含与以下命令类似的代码段(我在最近的企业应用程序中使用它,看起来与您所描述的非常相似):

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

在设置设备所有者后,锁定您的应用(或在您的情况下,只需查看首先包名称)进入Kiosk模式,您需要运行此代码段或类似内容,在您的应用程序的主要活动中:

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模式(这在技术上可以在重启时使用,即使使用Boot Listener实施),他们只能打开我想要的应用程序,而不是别的。

要执行此操作,您需要使用先前在设置自定义应用程序时将设备所有者权限隐藏/禁用应用程序,以便将Chrome或Firefox或其他任何内容锁定到Kiosk模式。

我可以告诉您如何在加载应用的设备上找到所有软件包名称,但我猜你可以解决这个问题...如果您遇到问题提示,请使用Android&#39 ;包管理器。

在这种情况下,我们要隐藏的软件包/应用程序是" 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);

然后你应该好好去,如果你需要任何额外的指针,请告诉我,但我使用几乎完全像这样的代码来做你几个月前所描述的。