Java 异步任务中android中的Internet连接检测
我有一个类,我用它来检测每个活动中是否有互联网连接。我的问题是,我不想每次都在AsyncTask上循环,因为当我更改上下文时,progressDialog中出现了一个问题。这是我的班级: 公共类互联网连接{Java 异步任务中android中的Internet连接检测,java,android,android-asynctask,Java,Android,Android Asynctask,我有一个类,我用它来检测每个活动中是否有互联网连接。我的问题是,我不想每次都在AsyncTask上循环,因为当我更改上下文时,progressDialog中出现了一个问题。这是我的班级: 公共类互联网连接{ public Boolean isInternetPresent; public ConnectionDetector cd; public Context con; public ProgressDialog progressBar; public InternetConnecti
public Boolean isInternetPresent;
public ConnectionDetector cd;
public Context con;
public ProgressDialog progressBar;
public InternetConnection () {
this.isInternetPresent = false;
}
public void hay_internet(){
new Async().execute();
}
public void cambiar_context(Context c) {
this.con = c;
this.cd = new ConnectionDetector(c);
progressBar=new ProgressDialog(con);
progressBar.setCancelable(false);
progressBar.setMessage("Buscando conexión de internet");
progressBar.setTitle("Conectando ...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setProgress(0);
}
class Async extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
isInternetPresent = cd.isConnectingToInternet();
if(!isInternetPresent) {
progressBar.show();
}
}
@Override
protected String doInBackground(String... params) {
while(!isInternetPresent){
isInternetPresent = cd.isConnectingToInternet();
}
return null;
}
@Override
protected void onPostExecute(String file_url) {
progressBar.dismiss();
new Async().execute();
}
}
公共布尔值是互联存在的;
公共连接检测器cd;
公共环境;
公共进度条;
公共互联网连接(){
this.isInternetPresent=false;
}
公共互联网{
新建异步().execute();
}
公共无效cambiar_上下文(上下文c){
this.con=c;
this.cd=新连接检测器(c);
progressBar=新建ProgressDialog(con);
progressBar.setCancelable(假);
progressBar.setMessage(“互联网公司”);
progressBar.setTitle(“Conectando…”);
progressBar.setProgressStyle(ProgressDialog.STYLE_微调器);
progressBar.setProgress(0);
}
类Async扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
isInternetPresent=cd.isConnectingToInternet();
如果(!isInternetPresent){
progressBar.show();
}
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
而(!isInternetPresent){
isInternetPresent=cd.isConnectingToInternet();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串文件\u url){
progressBar.disclose();
新建异步().execute();
}
}
}
如何修复此循环,以便停止每次调用AsyncTask 使用ConnectionManager检查是否有可用的网络连接。 例如,我在我的应用程序中使用此方法:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager=(ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
该方法是检查是否存在可用的连接。
如果您希望在连接状态发生变化(例如wifi丢失)时收到通知,则应使用广播接收器
public class NetworkStateChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null) {
if (info.isConnected()) {
// you got a connection! tell your user!
}
}
}
}
您需要在您的清单中注册此广播接收器:
<receiver android:name=".receiver.NetworkStateChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
看看Android在设备连接发生变化时广播的事件。你应该听他们的。阅读:这是我几天前发现的一个例子:我应该在每项活动中都写这个吗?我想在任何时候检测到我与互联网的连接中断,并通知用户没有连接,在没有互联网之前,他将无法做任何事情。@varjo-真棒的解释伙伴,直截了当+1.谢谢。:)我相信在网络状态改变的任何时间点,广播都会被称为ryt。请纠正我的错误。