startActivity в подклассе Application

У меня есть небольшое приложение для Android, в котором я напрямую указываю свое приложение и выполняю некоторую настройку всего приложения в ApplicationSubclass 'onCreate, но получаю следующую ошибку (обратите внимание, я знаю о FLAG_ACTIVITY_NEW_TASK):

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    at android.app.ContextImpl.startActivity(ContextImpl.java:644)
    at android.content.ContextWrapper.startActivity(ContextWrapper.java:258)
    at somePart.ofA.nameSpace.ApplicationSubclass.sendNotificationEmail(ApplicationSubclass.java:186)

Я вызываю это sendNotificationEmail, когда генерируются некоторые исключения, и я их перехватываю, чтобы пользователь приложения мог отправить небольшое электронное письмо с информацией об исключении, чтобы мне было легче исправить все, что может возникнуть, или направить их. исправляя их проблему.

Вот некоторые из соответствующих кодов:

manifest.xml:

<application android:label="@string/app_name" android:icon="@drawable/icon" android:name=".ApplicationSubclass">
// ... some stuff, including all of my app's activities
</application>

ApplicationSubclass определяется как:

public class ApplicationSubclass extends Application {
   // Multiple methods, including an override of onCreate

  public void sendNotificationEmail(String emailBody) {
      Intent emailIntent = new Intent(Intent.ACTION_SEND);
      emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      emailIntent.setType("text/html");
      emailIntent.putExtra(Intent.EXTRA_EMAIL, notificationRecipients);
      emailIntent.putExtra(Intent.EXTRA_SUBJECT, "MyAppName Error");
      emailIntent.putExtra(Intent.EXTRA_TEXT, emailBody);
      try {
          startActivity(Intent.createChooser(emailIntent, "An error has occurred! Send an error report?"));
      } catch (ActivityNotFoundException e) {
          // If there is nothing that can send a text/html MIME type
          e.printStackTrace();
      }
   }
}

Я хотел бы знать, почему это происходит. Я прочитал некоторую документацию, Я искал ответы на StackOverflow и Интернет в целом.Мне кажется, что со мной все будет в порядке, поскольку я устанавливаю FLAG_ACTIVITY_NEW_TASK, однако это явно не так!

Я просто не могу даже попытаться сделать это из контекста Приложения? Должен ли я находиться в Activity в моем приложении, когда пытаюсь это сделать? Было бы немного раздражать необходимость переделывать это, а возможность отправлять электронные письма об исключениях была бы весьма полезной!

РЕДАКТИРОВАТЬ : Рич задал хороший вопрос, и почему, черт возьми, я вообще хотел бы это делать? Ответ прост: в приложение загружаются данные, которые могут дать сбой, и я бы хотел, чтобы пользователь мог отправить некоторые из этих данных сбоя, когда это произойдет.

Причина, по которой это находится в приложении, а не в действии, заключается в том, что есть переменные состояния приложения, которые я не хочу терять каждый раз, когда кто-то поворачивает устройство. Когда я узнал о том, что onPause и onCreate вызываются при повороте (для Activies), я реорганизовал этот код в Приложение (которое отлично работает!). Я действительно пробовал отправить их в onConfigurationChanged и переопределить этот метод в своей деятельности, но это беспорядочно и по какой-то причине, несмотря на то, что в моем манифесте было указано android: configChanges = "keyboardHidden | ориентация" у меня правильно работает. Я уверен, что мог бы воспользоваться этим вариантом, но я бы предпочел оставить все как есть (это чище) и дать кому-то возможность отправлять электронную почту!

6
задан Kevek 12 October 2011 в 20:50
поделиться