2

我正在实现一个代码来验证是否有互联网连接。如果没有,它会启动 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),但我没有找到使用设置的任何解决方案。

有没有办法做到这一点?

提前致谢 ;)

4

2 回答 2

2

此调用不正确:

onCreateDialog(NETWORK_INACTIVE).show();

你永远不应该给onCreateDialog()自己打电话。Android 框架会为您完成这项工作。而不是打电话给onCreateDialog(NETWORK_INACTIVE).show();你应该这样做:

showDialog(NETWORK_INACTIVE);
于 2013-06-06T15:30:07.403 回答
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()则再次调用并再次检查网络。这对我来说很好。

于 2013-06-06T16:14:31.107 回答