我的应用是自助服务终端模式应用(除非用户输入代码,否则他无法访问任何Android应用)。因此,当选项卡启动时,有一些设置要在服务中完成。 我使用以下代码来检查网络连接(此代码在我的工作中被重用为实用程序类的一部分)。如果有可用的网络,我需要执行一个命令,否则必须触发一个事件。
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();

在Android 7中,此代码完美无瑕。在启动时,由于存在SIM和网络连接,我可以执行命令。
但在Android 6中,即使有网络可用性,代码也始终返回未连接/ OFFLINE。这在设备启动时发生。但是,应用程序启动后连接返回true。
在内部,connectivityManager.activeNetworkInfo基于具有IntentFilter ConnectivityManager.CONNECTIVITY_ACTION的BroadcastReceiver。从日志中,我可以看到CONNECTIVITY_ACTION正在应用程序安装期间注册,但在设备启动时不会发生这种情况。
我尝试对扩展应用程序的类进行网络连接检查但是也没有工作 - 认为检查会让应用程序在启动时意识到存在网络连接。
答案 0 :(得分:1)
正确等待网络连接:
CONNECTIVITY_ACTION
的清单注册接收者已弃用。如果您的目标是API 22+,则可以使用ConnectivityManager.requestNetwork()
进行回调而不是广播(此处未说明)。registerReceiver()
的返回值是一个意图,它是网络的当前状态(CONNECTIVITY_ACTION
是粘性广播)。采取行动。如果意图有一个额外的EXTRA_NO_CONNECTIVITY
,那么就没有网络连接,你的应用必须等到接收器被触发,然后再次检查连接。不同的设备和不同版本的Android以及不同的网络类型(包括不同的SIM卡)可能会导致网络接口何时连接出现不同的延迟。它绝对与您的应用程序启动或启动等无关。当您致电getActiveNetworkInfo()
时,它只是一个对系统服务器执行IPC以获取实际价值的存根。你的过程中没有逻辑运行或状态。