В настоящее время я пишу приложение для платформы Android, для которого требуется установленная SD-карта (или ExternalStorage ). Я знаю, что это может быть не лучшим способом требовать что-то подобное, но приложение будет работать с довольно большим количеством данных, и я даже не хочу думать о том, чтобы хранить это в памяти устройства.
В любом случае, чтобы убедиться, что приложение не будет работать без внешнего хранилища, я быстро проверю метод действия onCreate
. Если карта не установлена, я хочу отобразить сообщение об ошибке, а затем выйти из приложения.
Мой текущий подход выглядит так:
public void onCreate ( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.main );
try
{
// initialize data storage
// will raise an exception if it fails, or the SD card is not mounted
// ...
}
catch ( Exception e )
{
AlertDialog.Builder builder = new AlertDialog.Builder( this );
builder
.setMessage( "There was an error: " + e.getMessage() )
.setCancelable( false )
.setNeutralButton( "Ok.", new DialogInterface.OnClickListener()
{
public void onClick ( DialogInterface dialog, int which )
{
MyApplication.this.finish();
}
} );
AlertDialog error = builder.create();
error.show();
return;
}
// continue ...
}
Когда я запускаю приложение, и возникает исключение (я поднимаю его вручную, чтобы проверить, все ли работает), сообщение об ошибке отображается правильно. Однако, когда я нажимаю кнопку, приложение закрывается, и я получаю сообщение об ошибке Android, что приложение было неожиданно закрыто (и я должен принудительно завершить работу).
Я читал несколько тем перед закрытием приложения, и я знаю, что, возможно, такого не должно быть. Но как я должен вместо этого препятствовать тому, чтобы приложение продолжало работать? Как правильно закрыть приложение при возникновении ошибки?