检查Web应用是否已添加到Android主屏幕

Cla*_*son 8 android google-chrome homescreen progressive-web-apps

我有一个网络应用程序,在Android上我想显示一个警告,描述如何将我的应用程序添加到主屏幕.(将其添加到"书签",然后"将其添加到主屏幕"或"添加到主页中的快捷方式").然后屏幕上会显示一个图标,打开我的应用程序.

但是当然我只希望这显示该应用程序是否未添加到主屏幕.

有人知道怎么做这个吗?任何意见,谢谢.

Kor*_*nel 6

是的你可以。

从技术上讲,虽然在Chrome浏览器标签页中打开的页面无法直接检查主屏幕快捷方式是否存在,但该页面的本地数据(localStorage,IndexedDB)在主屏幕实例和浏览器标签之间共享,因此可以用来传达是否存在主屏幕快捷方式。主屏幕版本。

  1. 检测应用程序是否正在从主屏幕运行
  2. 如果是从主屏幕运行的,请将此事实保存到 localStorage
  3. 利润!(通过localStorage在任何标签中阅读)

当应用程序处于独立视图(仅当从主屏幕启动时才有可能)时,CSS媒体查询(display-mode: standalone)将匹配。在Javascript中,您可以使用以下方法阅读它:

matchMedia('(display-mode: standalone)').matches
Run Code Online (Sandbox Code Playgroud)

(顺便说一句:这是的非标准iOS版本navigator.standalone,但iOS在主屏幕和Safari之间不会共享状态,因此您不走运)。

但是,我建议您不要使用自定义说明,而要满足Chrome的“渐进式网络应用”标准,然后让Chrome为您进行提示。


小智 6

如果 Web 应用程序已添加到 Android 的主屏幕,则您无法检查该应用程序。最起码到现在。(铬 67)

但是您可以使用display-mode媒体查询判断应用程序是否在独立模式下运行。

将此添加到您的<style>标签中。

@media all and (display-mode: standalone) {
  body {
    background-color: yellow;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的<script>标签中。

if (window.matchMedia('(display-mode: standalone)').matches) {
  console.log('display-mode is standalone');
}
Run Code Online (Sandbox Code Playgroud)

或这个

if (window.navigator.standalone === true) {
  console.log('display-mode is standalone');
}
Run Code Online (Sandbox Code Playgroud)

您可以从此处查看更多信息


Ahm*_*kri -2

首先你得到设备上的应用程序列表

 List<ApplicationInfo> packs = pm.getInstalledApplications(0);
Run Code Online (Sandbox Code Playgroud)

然后你使用getLaunchIntentForPackage()

现在您已经获得了设备上安装的软件包列表,请迭代它们并对每个项目调用 getLaunchIntentForPackage()。

如果返回有效意图,则它存在于启动器上,否则如果返回 null,则包不会从启动器屏幕启动。请注意,主屏幕快捷方式是启动器应用程序的子集。