美好的一天,我有一个包含2个活动的应用程序:主页和详细信息页面。
当有互联网连接时,用户可以从主页面导航到详细信息页面。没有互联网连接时,他不能这样做。
问题是:当我在详细信息页面并关闭wifi时,我想完成此活动,我该如何实现此功能? 我在主要活动课上签了这样的东西:
private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); }
当我使用互联网启动应用程序或没有它时,它工作正常,但是当我在运行时关闭wifi时,它不起作用。
无论如何,谢谢!
答案 0 :(得分:5)
您必须Monitor for Changes in Connectivity
只要连接详细信息发生更改,ConnectivityManager就会广播CONNECTIVITY_ACTION("
android.net.conn.CONNECTIVITY_CHANGE
")操作。您可以在清单中注册广播接收器以收听这些更改并相应地恢复(或暂停)您的后台更新。
每当互联网状态发生变化时,您的广播接收器将被呼叫,如果互联网断开连接,您可以相应地处理它。
public class InternetReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (isConnected())
Log.d("NetReceiver", "Internet is connected");
else
Log.d("NetReceiver", "Internet is not connected");
}
};
此方法检查来自所有互联网来源的连接,包括3g
public boolean isConnected() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
} catch (IOException e) { Log.e("ERROR", "IOException",e); }
catch (InterruptedException e) { Log.e("ERROR", "InterruptedException",e); }
return false;
}
在您的清单文件中添加:
<receiver android:name=".InternetReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
以下是Source
答案 1 :(得分:3)
您可能希望实现侦听连接终止事件的广播接收器,以便您可以立即采取措施并完成详细活动。 这link可能有所帮助。
答案 2 :(得分:0)
试试这个: