当应用程序不是 运行 时,PendingIntent 内服务的通知操作不起作用
Notification action with Service inside PendingIntent doesn't work when app is not running
我有一个允许通过 Notification.Actions 响应通知的应用程序。所以基本上,我有一个 Pending Intent
Intent actionIntent = actionIntent = new Intent(this, NotificationActionIntentService.class);
actionPendIntent = PendingIntent.getService(
this,
requestCodeBtn,
actionIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
我在 NotificationActionIntentService 中所做的是向我的 BE 发送一个 HttpRequest,指示需要进行的更新。
注意:当应用程序在前台时,一切正常。
事情是这样的:
收到 GCM 后,当我立即按下 Notification.Action 时,一切仍然正常。
但是,当我在按下 Notification.Action 之前收到 GCM 等待大约 30 秒时,网络请求没有完成。日志仅显示它发出了网络请求。但我从来没有得到任何回应。当我在我的 BE 服务器中查看日志时。我没有收到网络请求。
但是当我手动启动应用程序时,网络又恢复了。当应用程序已经在前台时,网络请求似乎正在暂停然后恢复。 (我不想要这种行为,因为我希望它只在后台执行)
更新:按下 Notification.Action 后,一两分钟后(未打开应用程序)我在日志中收到 java.net.ConnectException: Failed to connect
。 (注意:我有互联网连接)。应用程序似乎无法连接到网络,而它仅在后台 运行。
PS:我正在使用 Retrofit 2 创建我的网络请求。我还使用 Android N 作为测试设备。
回答我自己的问题:
来源 ->
原来是当设备处于省电模式时,系统阻止了后台应用程序访问网络。
这是您可以使用的解决方案。
->
但您需要为此提供 android 通知。
我有一个允许通过 Notification.Actions 响应通知的应用程序。所以基本上,我有一个 Pending Intent
Intent actionIntent = actionIntent = new Intent(this, NotificationActionIntentService.class);
actionPendIntent = PendingIntent.getService(
this,
requestCodeBtn,
actionIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
我在 NotificationActionIntentService 中所做的是向我的 BE 发送一个 HttpRequest,指示需要进行的更新。
注意:当应用程序在前台时,一切正常。
事情是这样的:
收到 GCM 后,当我立即按下 Notification.Action 时,一切仍然正常。
但是,当我在按下 Notification.Action 之前收到 GCM 等待大约 30 秒时,网络请求没有完成。日志仅显示它发出了网络请求。但我从来没有得到任何回应。当我在我的 BE 服务器中查看日志时。我没有收到网络请求。
但是当我手动启动应用程序时,网络又恢复了。当应用程序已经在前台时,网络请求似乎正在暂停然后恢复。 (我不想要这种行为,因为我希望它只在后台执行)
更新:按下 Notification.Action 后,一两分钟后(未打开应用程序)我在日志中收到 java.net.ConnectException: Failed to connect
。 (注意:我有互联网连接)。应用程序似乎无法连接到网络,而它仅在后台 运行。
PS:我正在使用 Retrofit 2 创建我的网络请求。我还使用 Android N 作为测试设备。
回答我自己的问题:
来源 ->
原来是当设备处于省电模式时,系统阻止了后台应用程序访问网络。
这是您可以使用的解决方案。
->
但您需要为此提供 android 通知。