美好的一天,我有一个应用程序有2个活动:主页和详细信息页面.
当有互联网连接时,用户可以从主页面导航到详细信息页面.没有互联网连接,他不能这样做.
问题是:当我在详细信息页面并关闭wifi时,我想完成此活动,我该如何实现此功能?我检查了主要的活动类是这样的:
Run Code Online (Sandbox Code Playgroud)private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); }
当我用互联网启动应用程序或没有它时,它的工作正常,但是当我在运行时关闭wifi时,它不起作用.
无论如何,谢谢!
您必须监视连接的变化
android.net.conn.CONNECTIVITY_CHANGE只要连接详细信息发生更改,ConnectivityManager就会广播CONNECTIVITY_ACTION(" ")操作.您可以在清单中注册广播接收器以收听这些更改并相应地恢复(或暂停)您的后台更新.
每当互联网状态发生变化时,您的广播接收器将被呼叫,如果互联网断开连接,您可以相应地处理它.
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");
}
};
Run Code Online (Sandbox Code Playgroud)
此方法检查来自所有Internet源的连接,包括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;
}
Run Code Online (Sandbox Code Playgroud)
在您的清单文件中添加:
<receiver android:name=".InternetReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
这是源
| 归档时间: |
|
| 查看次数: |
2813 次 |
| 最近记录: |