startActivity(Intent)后恢复活动

时间:2013-06-06 14:59:56

标签: java android android-intent start-activity

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

有没有办法做到这一点?

提前致谢;)

2 个答案:

答案 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()并再次检查网络。这对我来说很好。