当应用程序不是 运行 时,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 通知。