Android后台BroadcastReceiver监听PROXY_CHANGE触发异常求助
网络代理监听异常问题排查
我需要监听网络代理的变化,在变化发生时检测网络状态,已在onReceive方法中加入日志打印。目前遇到的现象:
- 应用处于Activity前台时,日志能正常输出;
- 进入设置界面配置代理(应用后台)时,
onReceive的日志不会触发,返回Activity后会立即触发; - 后续确认实际情况:后台切换网络时
onReceive会触发一次,之后再切换网络就不再触发了。
已尝试使用WakeLock但没有效果,期望后台能正常执行onReceive中的代码,麻烦帮忙排查代码问题,提前感谢!
NetworkReceiver 代码
public class NetworkReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("NetworkChange", "onReceiveTest 代理接收器接收到了: " + intent.getAction()); InternetConnectionStatusHelper internetConnectionStatusHelper = InternetConnectionStatusHelper.getInstance(context); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ProxyInfo proxyInfo = connectivityManager.getDefaultProxy(); if (proxyInfo != null) { String host = proxyInfo.getHost(); int port = proxyInfo.getPort(); Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)); internetConnectionStatusHelper.setmProxy(proxyInfo); internetConnectionStatusHelper.checkConnection(); Log.d("NetworkChange", "onReceive has: 代理"); } else { internetConnectionStatusHelper.checkConnection(); Log.d("NetworkChange", "onReceive: 无代理"); } } }
NetworkService 代码(接收器注册逻辑)
public class NetworkService extends Service { private final String TAG = "NetworkChange"; BroadcastReceiver networkReceiver; @Override public void onCreate() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.intent.action.PROXY_CHANGE"); networkReceiver = new NetworkReceiver(); registerReceiver(networkReceiver, intentFilter); Log.d(TAG, "服务创建了"); super.onCreate(); } }
已获取的权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_VPN" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.WAKE_LOCK"/>
内容的提问来源于stack exchange,提问作者蒋文杰
相关产品推荐
相关产品推荐

