У меня есть небольшое приложение для 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 | ориентация"
у меня правильно работает. Я уверен, что мог бы воспользоваться этим вариантом, но я бы предпочел оставить все как есть (это чище) и дать кому-то возможность отправлять электронную почту!