This question already has answers here:
Check INTENT internet connection
(13个回答)
2年前关闭。
我正在制作一个应用程序,其中用户经常将信息和文件上传到我的服务器。这是通过专用的上载器服务在新线程中完成的。
我从这个线程知道
Detect whether there is an Internet connection available on Android
您可以相对轻松地检查是否有互联网连接。您还可以获取socketTimeoutExceptions来检测Internet连接问题。一切都很好,当由于某种原因导致连接无法正常工作时,我可以轻松地缓存我的上传内容。
我的问题是,我如何知道何时重新尝试上载?恢复连接时是否触发事件?还是我坚持制作一个新线程休眠,然后每隔30秒检查一次互联网连接?
任何想法,将不胜感激!
在您的 Activity 中:告知接收方
在您的 Activity 中:实现所需的方法
收件人
只需以NetworkStateReceiver.java复制并粘贴到您的项目中
请享用 ;)
(13个回答)
2年前关闭。
我正在制作一个应用程序,其中用户经常将信息和文件上传到我的服务器。这是通过专用的上载器服务在新线程中完成的。
我从这个线程知道
Detect whether there is an Internet connection available on Android
您可以相对轻松地检查是否有互联网连接。您还可以获取socketTimeoutExceptions来检测Internet连接问题。一切都很好,当由于某种原因导致连接无法正常工作时,我可以轻松地缓存我的上传内容。
我的问题是,我如何知道何时重新尝试上载?恢复连接时是否触发事件?还是我坚持制作一个新线程休眠,然后每隔30秒检查一次互联网连接?
任何想法,将不胜感激!
最佳答案
很老的帖子
但我想分享我的接收者
无需动用 list 或其他无聊的资源:)
用法
您的 Activity :
/*
* You need to implement NetworkStateReceiverListener.
* This interface is described inside the NewtworkStateReceiver class
*/
public class MyActivity implements NetworkStateReceiverListener {
/* ... */
private NetworkStateReceiver networkStateReceiver;
}
在您的 Activity 中:告知接收方
public void onCreate(Bundle savedInstanceState) {
/* ... */
networkStateReceiver = new NetworkStateReceiver();
networkStateReceiver.addListener(this);
this.registerReceiver(networkStateReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
}
public void onDestroy() {
super.onDestroy();
networkStateReceiver.removeListener(this);
this.unregisterReceiver(networkStateReceiver);
}
在您的 Activity 中:实现所需的方法
@Override
public void networkAvailable() {
Log.d("tommydevall", "I'm in, baby!");
/* TODO: Your connection-oriented stuff here */
}
@Override
public void networkUnavailable() {
Log.d("tommydevall", "I'm dancing with myself");
/* TODO: Your disconnection-oriented stuff here */
}
收件人
只需以NetworkStateReceiver.java复制并粘贴到您的项目中
public class NetworkStateReceiver extends BroadcastReceiver {
protected Set<NetworkStateReceiverListener> listeners;
protected Boolean connected;
public NetworkStateReceiver() {
listeners = new HashSet<NetworkStateReceiverListener>();
connected = null;
}
public void onReceive(Context context, Intent intent) {
if(intent == null || intent.getExtras() == null)
return;
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = manager.getActiveNetworkInfo();
if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
connected = true;
} else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
connected = false;
}
notifyStateToAll();
}
private void notifyStateToAll() {
for(NetworkStateReceiverListener listener : listeners)
notifyState(listener);
}
private void notifyState(NetworkStateReceiverListener listener) {
if(connected == null || listener == null)
return;
if(connected == true)
listener.networkAvailable();
else
listener.networkUnavailable();
}
public void addListener(NetworkStateReceiverListener l) {
listeners.add(l);
notifyState(l);
}
public void removeListener(NetworkStateReceiverListener l) {
listeners.remove(l);
}
public interface NetworkStateReceiverListener {
public void networkAvailable();
public void networkUnavailable();
}
}
请享用 ;)