android中检查互联网是不是持续活动的最佳方法是啥(当互联网不活动时)? [复制]
Posted
技术标签:
【中文标题】android中检查互联网是不是持续活动的最佳方法是啥(当互联网不活动时)? [复制]【英文标题】:What is the best way in android to check if internet is active continiously(when the internet is inactive)? [duplicate]android中检查互联网是否持续活动的最佳方法是什么(当互联网不活动时)? [复制] 【发布时间】:2017-05-16 18:17:53 【问题描述】:我正在构建一个 android 应用程序,它会在互联网连接再次处于活动状态时通知用户。当互联网不工作时,他/她必须启用该功能。做这个的最好方式是什么?目前,我正在服务中向 google 运行无限循环 ping 请求,但在数千个请求后它不会继续。有没有更简单或更好的方法来实现这一目标?谢谢你。
编辑: 大多数答案和参考资料仅在我的设备连接到 Wifi 时检查。但是,如果我的设备已连接到我的路由器但互联网连接不工作怎么办?
【问题讨论】:
阅读此developer.android.com/training/monitoring-device-state/… 我打赌这个问题在锁定之前会得到 6 个或更多答案:D 你输了。我们赌什么? :) @Gabe Sechan bah .. 你来得太早了 ^_^ 我打赌了吗,我不记得 muhahaa 【参考方案1】:我每次都使用广播来检查连接。为连接信息创建一个类。
import android.content.Context;
import android.content.ContextWrapper;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class ConnectivityStatus extends ContextWrapper
public ConnectivityStatus(Context base)
super(base);
public static boolean isConnected(Context context)
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo connection = manager.getActiveNetworkInfo();
if (connection != null && connection.isConnectedOrConnecting())
return true;
return false;
将代码应用到您的活动中:
private BroadcastReceiver receiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
if(!ConnectivityStatus.isConnected(getContext()))
// no connection
else
// connected
;
在您的活动的onCreate()
方法中注册广播:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
..
...
....
不要忘记在活动周期取消注册/注册:
@Override
protected void onResume()
super.onResume();
your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
@Override
protected void onPause()
super.onPause();
your_activity_context.unregisterReceiver(receiver);
【讨论】:
【参考方案2】:您可以使用广播接收器连续检查 Internet 可用性。当 Internet 可用时,接收方会通知您。
访问此页面,它可以帮助您 :Broadcast receiver for checking internet connection in android app
【讨论】:
【参考方案3】:向 google.com 创建一个简单的 ping 请求,并在活动中使用 volley 或其他一些网络库运行后台线程以保持 ping。在响应时,检查网络响应代码。如果是服务器错误代码(5xx 系列),则您的互联网不可用。如果您获得 OK 代码(2xx 系列),则您的互联网连接正常。对于这两种情况,请保持 500 毫秒的重试延迟并继续收集网络可用性响应。
或者,使用 Android 网络管理器。这个类可以实现如下:
public class NetworkConnectivity
Context context;
private Context _context;
public NetworkConnectivity(Context context)
this._context = context;
public boolean isNetworkConnected()
ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
return true;
return false;
每隔 500 毫秒从后台线程调用一次isNetworkConnected()
,并根据您想要使用有关连接状态的知识来使用响应(true 表示已连接,false 表示未连接)。
【讨论】:
以上是关于android中检查互联网是不是持续活动的最佳方法是啥(当互联网不活动时)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]