我正在尝试请求网络,所以我构建了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传入releaseNetworkRequest(PendingIntent),并将其传递给conn_manager.requestNetwork(net_req,pending_intent_net_req_received);
那么开发人员应该如何发布网络请求(PendingIntent)?
我可以以某种方式从服务中引用PendingIntent吗?我知道PendingIntents即使在调用它进入深渊的活动之后仍然活着。
我必须在这里遗漏一些东西,PendingIntents调用活动,接收器和服务,我看到的所有内容都不能引用回原来的PendingIntent。 此外,NULL无法传递到releaseNetworkRequest(PendingIntent) 根据Android文档?
另外请注意,我只是这样做,因为不推荐使用startUsingNetworkFeature(),鼓励开发人员使用NetworkRequest(),arg !!!
我现在真的被困在这里,没有办法去,如果有人能够解释我的这种困境,我很少会如此支持这个角落我将不胜感激。
答案 0 :(得分:1)
您可以使用您在首次创建时使用的相同代码在PendingIntent
中重新创建Service
:
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);
而不是activity
中的new Intent(...)
,您可以使用Service
实例,因为您只需要应用中的Context
。
注意:
在创建(或重新创建)此PendingIntent.FLAG_ONE_SHOT
时,可能没有必要使用PendingIntent
。我对FLAG_ONE_SHOT
的行为有很多问题,所以如果我是你,我会删除它。
文档指出PendingIntent
应触发Broadcast
,但您使用的是Service
。这可能会或可能不会按预期工作。祝你好运!