Я использую, AlarmManager
чтобы вызвать намерение, которое передает сигнал. Вот мой код:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, Wakeup.class);
try
{
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
Long elapsed += // sleep time;
mgr.set(AlarmManager.RTC_WAKEUP, elapsed, pi);
}
catch(Exception r)
{
Log.v(TAG, "RunTimeException: " + r);
}
Я вызываю этот код из Activity
, так что я не знаю, как я мог получить следующую ошибку ...
ERROR/AndroidRuntime(7557): java.lang.RuntimeException: Unable to start receiver com.wcc.Wakeup: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Для нескольких экземпляров одного и того же действия используйте следующий фрагмент:
Примечание : этот фрагмент я использую за пределами своего
Activity
. Убедитесь, что вашAndroidManifest
файл не содержитandroid:launchMode="singleTop|singleInstance"
. при необходимости вы можете изменить его наandroid:launchMode="standard"
.Это прекрасно работает для меня. Надеюсь, это сэкономит время для кого-то. Если кто-нибудь найдет лучший способ, пожалуйста, поделитесь с нами.
источник
Док Android говорит -
Это означает,
(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
что это необходимо добавитьIntent.FLAG_ACTIVITY_NEW_TASK
во время вызоваstartActivity()
внеActivity
контекста.Так что лучше добавить флаг для всех версий -
источник
Вы не вставили часть, куда вы звоните
startActivity
, это интересная часть.Вы можете звонить
startActivity
вService
контексте или вApplication
контексте.Напечатайте «this», чтобы войти в cat перед тем, как сделать
startActivity
вызов, и посмотреть, к чему это относится, иногда случается случайное использование внутреннего «this».источник
Иногда эта ошибка может возникать без явного вызова
startActivity(...)
. Например, некоторые из вас, возможно, видели трассировку стека в Crashlytics:И вы можете задаться вопросом, что вы сделали не так, так как трассировка включает только фреймворк. Ну, вот пример того, как это может произойти. Допустим, мы находимся во фрагменте.
Теперь, когда пользователь нажимает на это текстовое представление, ваше приложение падает с трассировкой стека выше. Это связано с тем, что вкладчик макета имеет ссылку на контекст приложения , и, следовательно, ваше текстовое представление имеет контекст приложения. Нажатие на это текстовое представление неявно вызывает
appContext.startActivity(...)
.Последнее замечание: я проверял это на устройствах Android 4, 5, 6 и 7. Это влияет только на 4, 5 и 6. Устройства Android 7, по-видимому, без проблем звонят
appContext.startActivity(...)
.Я надеюсь, что это помогает кому-то еще!
источник
С этой же ошибкой я столкнулся в случае получения Уведомления в последних устройствах Android 9 и 10.
От режима запуска зависит, как вы справляетесь с этим. Используйте следующий код: - android: launchMode = "singleTask"
Добавьте этот флаг с помощью Intent: - intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
источник
Попробуйте перейти на эту строку:
источник
Я просто хочу заметить, что
startActivity
извне действие действует в некоторых версиях Android (между N и O-MR1), и интересным моментом является то, что это ошибка в исходном коде Android!Это комментарий выше
startActivity
реализации. Смотрите здесь .источник
Если вы хотите открыть действие в своем приложении, вы можете вызвать метод startActivity () с параметром Intent в качестве. Это намерение было бы деятельностью, которую вы хотите открыть. Сначала вы должны создать объект этого намерения с первым параметром в качестве контекста и вторым параметром в качестве целевого класса действий.
Надеюсь, это поможет.
источник