Повторный запуск приложения из MAIN и очистка стека активности - PullRequest
1 голос
/ 14 марта 2011

Я разработал приложение для Android 2.1, которое использует Soap Web Service.Когда мое приложение запускается, оно сначала проверяет, есть ли подключение к Интернету или нет.

Если это так, оно отображает соответствующую активность.Если нет, то он будет отображать активность (NetworkErrorActivity), предоставляя информацию о сетевых ошибках и все.

Проблема в том, что если нет подключения к Интернету, он показывает мне NetworkErrorActivity.Теперь, когда пользователь нажимает кнопку «Назад», он перенаправляет пользователя на главную страницу.Я переопределил метод onBackPressed следующим образом:

@ Переопределить public void onBackPressed () {

        Intent setIntent = new Intent(Intent.ACTION_MAIN);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent); 
        return;
    }

После нажатия кнопки назад, он показывает мне домашний экран Android.Но проблема в том, что когда я снова запускаю то же самое приложение, оно показывает мне NetworkErrorActivity, даже если есть сетевое подключение.Не удалось запустить приложение из Main Launcher Activity.Это всегда показывает мне одну и ту же активность снова и снова.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Я использую AlertDialog (не Activity), чтобы информировать пользователя о необходимости сетевого подключения с возможностью перевести их в сетевые настройки (чтобы включить мобильные / Wi-Fi) подключения. Если вместо этого они выбирают «Отмена», я заставляю основную деятельность завершать ().

Проверьте сетевое соединение в основном действии onResume () и, если соединения нет, то вызовите CreateNetErrorDialog () ... невозможно использовать BACK, чтобы закрыть диалоговое окно - только Cancel, который убивает основное действие.

Пример ...

protected void CreateNetErrorDialog(String errorMessage) {
    Log.d(TAG, "CreateNetErrorDialog() entered...");

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(errorMessage)
    .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) {
                MyMainActivity.this.finish();
            }
        }
    );
    AlertDialog alert = builder.create();
    alert.show();
    Log.d(TAG, "Exiting CreateNetErrorDialog()...");
}

EDIT: Вызовите CreateNetErrorDialog из метода onPostExecute () вашего AsyncTask - он выполняется в потоке пользовательского интерфейса (doInBackground этого не делает). Пример из моего собственного кода ...

private class FileDownloader extends AsyncTask<String, Void, Void> {
    private Boolean Success = false;
    private String ResultString = "";

    @Override
    protected Void doInBackground(String... params) {
        try {
            // Do whatever
        }
        catch (Exception e) { // <-- Use the correct exception type
              ResultString = "Some error message";
        }
    }

    @Override
    protected void onPostExecute(Void result) {
        if (!Success)
            CreateNetErrorDialog (ResultString);
        else
            // Do whatever
    }
}
0 голосов
/ 14 марта 2011

Я не знаю точно, что вы хотите, но попробуйте что-то подобное, вместо того, чтобы устанавливать соединение и писать код в catch block, что не является хорошей практикой

для проверки использования в сети следующего кода

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();

, а затем в зависимости от результата кода выше

if (ni == null)
{
      //Show you network error activity
}
else
{
    //Show some other activity
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...