gpt4 book ai didi

android - 如何在 PendingIntent 不再可用时正确调用 releaseNetworkRequest(PendingIntent)

转载 作者:行者123 更新时间:2023-11-30 00:00:42 37 4
gpt4 key购买 nike

我正在尝试请求网络,因此我构建了 NetworkRequest 并构建了 PendingIntent,

ConnectivityManager conn_manager =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkRequest net_req;
net_req = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) //Data Network?
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) //Wifi
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) //This might be what need internet permission
.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS)
.build();

Intent intent_sent = new Intent(activity, Service_MmsNetworkAvailable.class);

PendingIntent pending_intent_net_req_received = PendingIntent.getService(activity, 0, intent_sent,
PendingIntent.FLAG_ONE_SHOT);

conn_manager.requestNetwork(net_req, pending_intent_net_req_received);

然后,一旦服务从调用它的 PendingIntent 运行,我就会在服务内部执行一些网络操作,然后当我完成时,我相信我需要调用 releaseNetworkRequest(PendingIntent)。

但这就是我的全部问题,我如何从服务内部引用启动服务的 PendingIntent?无法保证创建 NetworkRequest 和 PendingIntent 的 Activity 仍然存在,因此我不能依赖返回该 Activity 来调用 releaseNetworkRequest(PendingIntent),其中我引用了 PendingIntent。

Android 明确指出,您必须将相同的 PendingIntent 传递到您传递到 conn_manager.requestNetwork(net_req, pending_intent_net_req_received); 的 releaseNetworkRequest(PendingIntent);

那么开发者应该如何释放NetworkRequest(PendingIntent)?

我能否以某种方式从服务中引用 PendingIntent?我知道 PendingIntents 即使在调用它的 Activity 进入深渊之后仍然存在。

我一定在这里遗漏了一些东西,PendingIntents 调用 Activities、Receivers 和 Services,我看到的这些都不能引用回原始的 PendingIntent。此外,NULL 不能传递到 releaseNetworkRequest(PendingIntent)根据 Android 文档?

还要注意,我这样做只是因为 startUsingNetworkFeature() 已被弃用,鼓励开发人员使用 NetworkRequest(),arg!!!

我现在真的被困在这里无路可退,很少有人能在这里退缩到一个角落,如果有人能阐明我的这种困境,我将不胜感激。

最佳答案

您可以在您的 Service 中重新创建 PendingIntent,方法是使用您最初创建它时使用的相同代码:

Intent intent_sent = new Intent(activity, Service_MmsNetworkAvailable.class);
PendingIntent pending_intent_net_req_received = PendingIntent.getService(activity, 0, intent_sent,
PendingIntent.FLAG_ONE_SHOT);

代替 new Intent(...) 中的 activity,您可以使用 Service 实例,因为您只需要一个 来自您的应用程序的上下文

注意事项:

  1. 创建(或重新创建)此 PendingIntent 时,可能没有必要使用 PendingIntent.FLAG_ONE_SHOT。我对 FLAG_ONE_SHOT 的行为有很多问题,所以如果我是你,我会直接删除它。

  2. 文档指出 PendingIntent 应该触发 Broadcast,但您使用的是 Service。这可能会或可能不会按预期工作。祝你好运!

关于android - 如何在 PendingIntent 不再可用时正确调用 releaseNetworkRequest(PendingIntent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49994528/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com