Я использую 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
}
}