Chrome或Firefox的亭台模式

4
我需要为多个Android设备编写一个自助服务启动器。它应该启动Chrome或Firefox,全屏显示特定的网页。该页面已经调用了HTML5 requestFullScreen() API,但由于该调用不是来自用户生成的事件,因此由于安全原因被浏览器拒绝。 我进行了一些搜索,发现了以下问题: 这两个答案最终都指向现有的应用程序或浏览器,其中一些正在做我试图完成的事情。这感觉有点过度,因为我已经在使用一个应用程序来启动这个东西。而且我不能像建议的here那样使用特殊的浏览器,因为像Firefox或Chrome这样的主要浏览器在更新和支持的功能方面更可靠。
但与此同时,这些应用程序存在的事实意味着我需要做的任何事情都是可以做到的。从Kiosk Browser Lockdown中:
[专业功能] 全屏模式/隐藏工具栏
我的问题是:他们用来完成这个任务的Android API是什么?这个时候我是否有所遗漏?我应该寻找哪些文档页面、指南或文章?
谢谢
2个回答

0

你是否必须百分之百地使用Chrome或Firefox?

通过开发一个带有自定义WebView的亭子应用程序,仅显示您想要显示的网页,可以更轻松地实现您所说的内容。我可能在这方面是错误的,但我相信Android上的WebViews在技术上是Chrome(或类似于它的东西),但无论如何,使用其中一个,我都不认为您需要担心更新。然而,这不是您所问的...因此,我将描述一种使用Chrome或Firefox的解决方案。我的解决方案还意味着您需要访问您正在加载软件的设备,而不是商业应用程序,因为您需要ADB。

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

仅供参考……我不确定没有设备所有者权限是否可能设置“真正的”Kiosk应用程序,如果没有这些权限,您实际上不能将应用程序锁定到屏幕。在我描述的情况下,你需要使用设备所有者才能获得真正的Kiosk实现,而不是像市场上大多数应用程序一样模拟该功能的巧妙解决方法。然而,我也打赌这些应用程序具有某种设备管理员权限,这些权限比设备所有者权限弱,但仍然很强大。

我所描述的“真正”的方法将通过ADB(或命令行)完成,类似于以下命令片段(我在最近的企业应用程序中使用了这个命令片段,它与您所描述的内容非常相似):

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

关于在设置设备所有者后锁定您的应用程序(或在您的情况下是Chrome或Firefox,请先找出包名),您需要在应用程序的主活动中运行此代码片段或类似代码:

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的Package Manager。

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

那么你应该可以开始了,如果你需要任何额外的指针,请告诉我,但是几个月前我使用几乎完全相同的代码来完成了你似乎正在描述的事情。


0
我有一个类似的问题,商业应用程序在Linux系统或Windows操作系统上运行。该应用程序是为在浏览器中运行而设计的。 过去,我们打开了一个自定义的浏览器窗口,并关闭主窗口: *隐藏菜单栏。 *隐藏按钮栏。 *保持关闭/最小化窗口按钮。
全屏模式无法使用,因为它会隐藏窗口按钮。
现在,越来越多的基于浏览器的应用程序将出现(angularjs和类似应用程序即将推出...)。
我发现Atom应用程序可以使用chromium实现这一点。
这是否意味着我必须嵌入一个Web浏览器到我的应用程序设置中?并且坚持使用某个浏览器(例如Chromium),尽管我的应用程序与许多浏览器兼容。

经过一些研究,我发现在某些浏览器中有一个“应用程序模式”。历史上,Prism和Mozilla Chromeless曾为Firefox提供此功能。但这已被弃用......如果您在命令行中使用--app开关运行Chromium,则可以获得“应用程序模式”。我在这里找到了一些开关https://peter.sh/experiments/chromium-command-line-switches/。 - sancelot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接