11

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

但是当然,我只想显示应用程序是否未添加到主屏幕。

有人知道怎么做这个吗?任何输入表示赞赏,谢谢。

4

5 回答 5

11

是的你可以。

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

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

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

matchMedia('(display-mode: standalone)').matches

(顺便说一句:与此等效的非标准 iOS 是navigator.standalone,但 iOS 不会在主屏幕和 Safari 之间共享状态,所以你在那里不走运)。

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

于 2016-10-11T20:44:24.283 回答
6

如果将 Web 应用程序添加到 Android 的主屏幕,您将无法检查它。至少现在。(铬 67)

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

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

@media all and (display-mode: standalone) {
  body {
    background-color: yellow;
  }
}

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

if (window.matchMedia('(display-mode: standalone)').matches) {
  console.log('display-mode is standalone');
}

或这个

if (window.navigator.standalone === true) {
  console.log('display-mode is standalone');
}

您可以从这里查看更多信息。

于 2018-07-16T05:12:05.063 回答
4

简短的回答是:从一个网站你不能。

更长的答案是:从网站上,您可能会在 Chrome 中获得提示。

Android 上的 Chrome 有两个新功能 1) Web App Manifest描述了应该从主屏幕启动的内容以及它在主屏幕上的外观,以及 2) Chrome 现在有一个beforeinstallprompt事件可以触发我们认为是应用程序的 Web 应用程序-喜欢并且可以安装到主屏幕。

触发事件有许多标准,onbeforeinstallprompt这可能使其成为“好的”启发式(尽管我怀疑不是)。

该事件仅在以下情况下触发:

  • 该站点有一个清单,在 https 上并且有一个服务人员。(这可能有点牵强)。
  • 用户多次与网站互动(现在,至少 5 分钟内两次)。
  • 用户尚未将您的站点添加到主屏幕。

所以,总而言之,它是复杂的,充满了误报和漏报。但是,如果您只想检测是否应该显示横幅以提示用户将您的网络应用添加到主屏幕,那么 Chrome 已经为您提供了解决方案。

我们的样品网站上还有全系列样品。

于 2015-12-01T10:47:06.803 回答
1

我认为你可以做到。只需将查询字符串添加到 manifest.json 中的 start_url 并在您的 javascript 中检查 start url 是否具有该查询字符串。如果找到查询字符串,则安装是的应用程序。

于 2017-08-11T04:53:13.697 回答
-2

首先,您会获得设备上的应用程序列表

 List<ApplicationInfo> packs = pm.getInstalledApplications(0);

然后你使用getLaunchIntentForPackage()

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

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

于 2013-09-06T08:19:21.063 回答