gpt4 book ai didi

java - 在android中连续检查互联网连接的最佳方法是什么

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:25 24 4
gpt4 key购买 nike

我正在开发一个应用程序。在那个屏幕中,在 onCreate() 方法之后立即检查 Internet 连接。如果网络连接良好,我将调用一个 AsyncTask 类来加载国家/地区列表并将其显示在 spinnerView 的屏幕上。如果没有网络连接,我将向用户显示 Toast 消息并调用 check_Network(AsyncTask)。在此类 protected Long doInBackground(URL...params) 方法中,我正在检查网络是否已连接,如果已连接则调用国家/地区 AsyncTask,否则我将再次调用 check_Network(AsyncTask)。重复此过程,直到网络连接。我的问题是这是反复检查网络的正确方法。请建议我。对不起,我的英语很差,请理解。我正在展示我的代码

if (CheckNetwork.isOnline(this)) {
try {
new CountryProcess().execute();
} catch (Exception e) {
e.printStackTrace();
}
} else {


Toast.makeText(
getApplicationContext(),
getString(R.string.network_connection_fail)
+ "!", Toast.LENGTH_LONG).show();
new NetWork_connectivity().execute();
}

//.......................//

class NetWork_connectivity extends AsyncTask<URL, Integer,Long>
{
@Override
protected Long doInBackground(URL... params)
{
if (CheckNetwork.isOnline(MainActivity.this)) {

new CountryProcess().execute();

}else
{
new NetWork_connectivity().execute();
}

return null;
}
}

最佳答案

在 list 中添加以下代码,用于添加具有连接更改 Intent 的接收器

<receiver android:name=".NetworkStateReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在接收方,获取与 Intent 相关的额外信息并检查状态。因此,每当网络状态发生变化时,您都会收到通知,然后相应地执行您的任务。

public class NetworkStateReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getExtras()!=null) {
NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
//connected
}
}
if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
//not connected
}
}
}

对于您的情况,您希望在 list 中添加权限并在您的 Activity 中注册接收者。

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkReceiver, filter);

确保在离开 Activity 之前取消注册

unregisterReceiver(networkReceiver);

private BroadcastReceiver networkReceiver = new BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getExtras()!=null) {
NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
//connected
}
}
//not connected
}
}

并且根据您的要求,您只需要一次连接状态。首先检查连接,如果未连接则仅注册接收器。

public boolean isNetworkConnected() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}

关于java - 在android中连续检查互联网连接的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31354449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com