我正在尝试创建一个连接到网络服务器并检索数据的应用程序,我想做一些功能
- 当我点击我的应用程序时,首先它检查是否启用了互联网访问?如果启用它会启动应用程序,否则打开互联网访问设置..之后它会重定向到我的应用程序....
- 当应用程序连接到 web 服务器时,如果连接不成功,则在特定时间后连接超时。
我正在尝试创建一个连接到网络服务器并检索数据的应用程序,我想做一些功能
在我的一个应用程序中,我有一个这样定义的类:
public class ConnectionDetector {
private Context _context;
public ConnectionDetector(Context context){
this._context = context;
}
/**
* Checking for all possible internet providers
* **/
public boolean isConnectingToInternet(){
ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
}
在我需要检查连接状态的活动中,我使用这个:
// DEFINE THIS AS A GLOBAL VARIABLE
AlertDialogManager alert = new AlertDialogManager();
在onCreate()
:
ConnectionDetector cd = new ConnectionDetector(getApplicationContext());
// Check if Internet present
if (!cd.isConnectingToInternet()) {
// Internet Connection is not present
alert.showAlertDialog(MainActivity.this, "Internet Connection Error",
"Please connect to working Internet connection", false);
// stop executing code by return
return;
}
哦。差点忘了。如果您还需要将用户重定向到设置面板以激活 Internet,则可以使用这样的 Intent:
您可以在 AlertDialog 中提示用户并让他们选择是否愿意。如果是,请运行这段代码。
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivity(intent);
编辑:
我错过了明显的(Commonsware 在他的评论中指出了这一点)。
您需要将ACCESS_NETWORK_STATE权限添加到您的清单文件。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
您可以使用此方法:
public boolean isConn() {
ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity.getActiveNetworkInfo() != null) {
if (connectivity.getActiveNetworkInfo().isConnected())
return true;
}
return false;
}
并将此权限添加到清单文件:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
这是我用来检查互联网连接的功能
// Checks Internet Status
public boolean isOnline() {
if(cm == null)
return false;
final NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED)
return true;
return false;
}
还要将此权限添加到您的清单文件
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
要将用户发送到 WiFi 设置页面,请使用
startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));