当应用不在前台时,Ionic / Cordova 触发应用操作

Posted

技术标签:

【中文标题】当应用不在前台时,Ionic / Cordova 触发应用操作【英文标题】:Ionic / Cordova trigger app action when app isn't in foreground 【发布时间】:2017-04-13 21:20:53 【问题描述】:

原始问题(听硬件按钮按下)

我想知道是否可以使用 Ionic / Cordova 收听电话的硬件按钮。 重要的是,当用户当前没有像通过后台服务那样使用应用程序时,这也应该起作用? 基本上,当用户在使用 Ionic 的混合应用程序中同时按下音量降低和电源按钮时,我想截取屏幕截图。 然后应用程序提供编辑或保存该屏幕截图直接。

我做了一些研究,发现cordova events 可以收听这些按钮。我还读到按下电源按钮时应该触发暂停事件。无论如何,我认为在该应用程序之外收听这些事件不会起作用?

原始问题结论

经过更多研究后,我得出结论,使用 Cordova / Ionic 不可能做到这一点。即使是这个问题的本机实现似乎也更像是一个 hack,而不是一个干净的解决方案。这样做的原因是,当前位于顶部的应用程序应该具有处理各种按钮事件的控制权。您可能会干扰另一个应用程序,并且您总是需要运行后台服务。 总之,我看到的所有解决方案对我来说都太脏了。

更新问题/重新评估问题

基本上我想在用户在混合应用程序中同时按下音量和电源按钮时截取屏幕截图 使用离子。

如果我不能解决当前的问题,我必须重新考虑它。所以:实际上,我只是希望用户能够以提供良好可用性体验的方式截取屏幕截图。

作为同时按下两个硬件按钮的替代方法,我可以通过多种方式来做到这一点。

选项 1: 用户按下“截屏”按钮 -> 应用进入后台,从底层应用截取屏幕截图,应用返回前台。 AFAIK 这甚至在 ios 中都行不通,只有 android 提供“在其他应用程序之上绘图”,所以在 iOS 中,屏幕截图在所有情况下都只会从主屏幕上截取......?

选项 2: 用户按下“截屏”按钮 -> 应用进入后台并推送通知。

此通知可能会显示“点击截屏”。通知面板(始终绘制在其他应用程序之上)消失,截取屏幕截图并弹出应用程序。这可以使用Local Notifications 并监听 on clear、cancel 等事件来完成。 通知甚至可以有自定义按钮使用OneSignal(见Action Buttons)。一个按钮可以说“添加屏幕截图”,另一个按钮可以说“完成”,因此用户甚至可以一次截取多个屏幕截图。

选项 3: 可以将按钮添加到触发截屏操作的快捷方式。我不知道这是否可能以及是否适用于所有设备。

我想说最好的解决方案是使用选项 2:通知上的自定义操作按钮。通知应该是所有设备上的必备工具,并且应该始终绘制在当前应用程序的顶部。因此,用户只需向下滑动通知并按下按钮即可截取屏幕截图。

我对这个主题并没有任何先验知识,所以如果有人能证实或改进我的思维过程,我会很高兴。

【问题讨论】:

【参考方案1】:

编辑:

我对此做了一些研究,主要是为了满足我自己的好奇心。我遇到了这个插件

https://github.com/katzer/cordova-plugin-background-mode/blob/master/README.md

它允许您在后台执行任务。

请在自述文件中注意这一点。

商店合规性

大多数移动操作系统不支持无限后台任务,因此不符合公共商店供应商的要求。不保证成功提交。

使用插件需要您自担风险!

这在 Android 上可能没什么大不了的,但是关于 Apple 应用商店提交被拒绝的问题存在一个悬而未决的问题。通读这个问题,看看其他人是如何解决这个问题的。

https://github.com/katzer/cordova-plugin-background-mode/issues/122

原答案:

如果你想截图,有这个插件:

https://github.com/gitawego/cordova-screenshot/blob/master/README.md

也许您可以在使用暂停侦听器的同时侦听其他一些事件。如果它们被激活,则使用上面引用的屏幕截图插件调用:

navigator.screenshot.save(function(error,res)
    if(error)
        console.error(error);
    else
        console.log('ok',res.filePath);
    
);

【讨论】:

我编辑了我的答案以包含有关截图插件的信息。 谢谢你们。我试图从不同的角度看待问题并更新了问题。

以上是关于当应用不在前台时,Ionic / Cordova 触发应用操作的主要内容,如果未能解决你的问题,请参考以下文章

Ionic / Cordova:如何强制应用程序在启动时刷新,即使它在后台?

Ionic Cordova:Push Notification 插件 onMessage 接收消息。

Cordova / Ionic iOS 应用程序在加载插件时挂在启动屏幕上

cordova-ionic 应用程序在后台进行地理定位 - android 和 ios

当应用程序不在前台时,特定活动不会从通知单击打开(应用程序是最近的,没有被杀死!)

如何在 ionic cordova 应用程序中获取 SIM 信息