我正在实施一个代码,用于验证是否存在互联网连接。如果没有,它会启动WiFi的设置,以便用户可以选择Internet连接。
问题是我希望当用户选择连接并单击后退按钮时,我的活动会再次验证是否有任何连接继续执行,但它会再次进入NETWORK_INACTIVE
对话框。
以下是我开始新活动的代码:
protected boolean hasNetworkConnection() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
try{
if (!wifi.isConnected()){
if(mobile==null || (mobile!=null && !mobile.isConnected())){
onCreateDialog(NETWORK_INACTIVE).show();
return false;
}
}
}catch(Exception e){
Log.e("AEP41-Has Network", ""+e.getStackTrace());
}
return true;
}
@Override
protected Dialog onCreateDialog(int id) {
AlertDialog.Builder builter = new AlertDialog.Builder(
AEP41Activity.this);
switch (id) {
case NETWORK_INACTIVE:
builter.setCancelable(false);
builter.setTitle("Erreur de Reseau");
builter.setMessage("Aucune connexion internet trouve");
builter.setNegativeButton("Sortir",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
AEP41Activity.this.finish();
}
});
builter.setNeutralButton("Choisir Connexion",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(
Settings.ACTION_WIFI_SETTINGS));
});
break;
default:
break;
}
return builter.create();
}
我看过选项startActivityForResult(Intent, int)
,但我没有找到使用设置的任何解决方案。
有没有办法做到这一点?
提前致谢;)
答案 0 :(得分:2)
此调用不正确:
onCreateDialog(NETWORK_INACTIVE).show();
你不应该自己打电话给onCreateDialog()
。 Android框架为您完成此任务。而不是调用onCreateDialog(NETWORK_INACTIVE).show();
,你应该这样做:
showDialog(NETWORK_INACTIVE);
答案 1 :(得分:1)
我检查了onResume()
中的有效连接,如果没有,我有一个创建AlertDialog
的方法,如下所示......
protected void createNetErrorDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("You need a network connection to use this application. Please turn on mobile network or Wi-Fi in Settings.")
.setTitle("Unable to connect")
.setCancelable(false)
.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
startActivity(i);
}
}
)
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MainActivity.this.finish();
}
}
);
AlertDialog alert = builder.create();
alert.show();
}
如果用户点击取消按钮,我会完成Activity
,否则启动设置。如果用户在“设置”中点击“返回”,则再次调用onResume()
并再次检查网络。这对我来说很好。