如果不使用通知或按钮单击未从某些待处理的意图打开应用程序,是不是可以调用活动?

Posted

技术标签:

【中文标题】如果不使用通知或按钮单击未从某些待处理的意图打开应用程序,是不是可以调用活动?【英文标题】:Can an activity be invoked when the app is not opened from some pending intent without using notification or button clicks?如果不使用通知或按钮单击未从某些待处理的意图打开应用程序,是否可以调用活动? 【发布时间】:2017-01-17 20:04:54 【问题描述】:

注意:我没有编写任何代码,只是在寻找结构/关键字或如何实现它的想法。

用例: 我有一个activity,当通过按钮单击、notification 单击等手动打开时,它基本上显示一些显示/数据/或执行一些操作等。现在我想在满足特定条件时显示相同的东西[比如我的地理位置匹配我强制成为我的家或用户家]。 1. 无需用户点击任何通知, 2.不打开活动, 3.无需点击按钮, 4. 无需打开应用。

简而言之,我希望我的应用在我在家或到达地理围栏时启动,这可以实现吗?

我知道Pending Intents,但似乎他们需要打开一次activity 并注册intent,如果这是唯一的方法,请告诉我。

请帮忙!

【问题讨论】:

请解释您打算如何“显示相同的东西”“不打开活动”和“不打开应用程序”。 @CommonsWare :很抱歉造成混乱,简单的描述就像我在回家时展示一个吐司说“我在家”。但想法不是通过通知等手动打开应用程序,而是自行打开,例如触发以 lat 和记录达到的值打开应用程序的自动化代码。 【参考方案1】:

满足特定条件时

这通常是不可能的。例如,android 没有任何内置功能可以根据您邻居表弟的女儿何时在 Stack Overflow 上发布内容来自动执行某些操作。尽管这是可以满足的特定条件,但 Android 不了解您的邻居,也不了解您邻居的亲戚,也不了解邻居的表弟的孩子,也不了解您邻居表弟的女儿的在线行为。

Android 可以处理特定的事情,让您能够控制相关条件,例如 AlarmManager 用于在特定时间点获得控制权,或 JobScheduler 用于获取在环境合适时定期控制(例如,我们有连接并且正在充电)。

您的问题以地理围栏为例。 Play Services SDK 提供了您可以使用的地理围栏 API,可以让您控制用户何时进入特定区域。

我希望我的应用在我在家或到达地理围栏时启动,这可以实现吗?

欢迎您调用这些地理围栏 API,提供指向 WakefulBroadcastReceiverPendingIntent,而 WakefulBroadcastReceiver 又指向 IntentService,您可以在那里做点什么。

如果“我的应用程序已启动”,您的意思是调出您的一项活动,虽然这在技术上可以使用活动PendingIntent,但您可能会让您的用户因打断他们正在做的事情而非常不高兴(例如,收集宝可梦)。请考虑改用Notification

我知道 Pending Intents,但似乎他们需要打开一次活动并注册意图

在用户手动运行您的应用程序(例如,点击您的主屏幕启动器图标)之前,您的任何应用程序都不会运行,或者直到其他东西使用明确的Intent 来启动您的组件之一。此时,您可以调用地理围栏 API,假设您以某种方式知道用户的家在哪里。

很可能,您需要用户花时间在活动中,只是为了从用户那里收集有关他们希望在哪里建立地理围栏的数据。

【讨论】:

谢谢,我会尝试按照您给我的指导,希望我可以利用一些技巧。 感谢您的帮助,如果我不使用任何昂贵的资源(如互联网和地图)(如 Pokemon Go 等 GPU 周期),打开应用程序一次并保持挂起似乎不会那么糟糕。再次感谢!

以上是关于如果不使用通知或按钮单击未从某些待处理的意图打开应用程序,是不是可以调用活动?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用通知待处理意图操作删除图像?

通知中的待处理意图不起作用

第二个待处理意图(具有唯一请求代码)不会打开活动

单击推送通知时对特定活动的意图。

多个意图打开错误活动的待处理意图

即使重新创建活动,也不会清除待处理的意图额外内容