Как определить что Activity уже запущена?
Как определить что Activity уже запущена?
Всем привет
вопрос такой - в классе надо сделать разветвление:
1) если активити не существует - то создать ее
2) если существует - то изменить находящийся в ней TextView
не могу понять как именно сделать такое разветвление?
что то типа:
if activity.существует==true {
bla-bla-bla
}else{
bla-bla-bla
}
вопрос такой - в классе надо сделать разветвление:
1) если активити не существует - то создать ее
2) если существует - то изменить находящийся в ней TextView
не могу понять как именно сделать такое разветвление?
что то типа:
if activity.существует==true {
bla-bla-bla
}else{
bla-bla-bla
}
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Как определить что Activity уже запущена?
Это делается через флаги при запуске Activity. Кажется Intent.FLAG_ACTIVITY_SINGLE_TOP.
Если использовать этот флаг, и Activity уже запущена и отображается на экране, Новая Activity не запустится, а вызовется метод onNewIntent в ранее запущенной Activity.
Если Activity находится не на верху стека(скрыта другой Activity) можно попробовать добавить флаг FLAG_ACTIVITY_REORDER_TO_FRONT. На счет этого я не уверен, не пробовал.
Если использовать этот флаг, и Activity уже запущена и отображается на экране, Новая Activity не запустится, а вызовется метод onNewIntent в ранее запущенной Activity.
Если Activity находится не на верху стека(скрыта другой Activity) можно попробовать добавить флаг FLAG_ACTIVITY_REORDER_TO_FRONT. На счет этого я не уверен, не пробовал.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Как определить что Activity уже запущена?
Для того, чтобы запустить активити, или вывести активити наверх из стека, если оно уже запущено - использовать флаг NEW_TASK_LAUNCH в методе startActivity()
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Как определить что Activity уже запущена?
а как запустить activity из BroadcastReceiver с параметром Intent.FLAG_ACTIVITY_SINGLE_TOP?
у меня не получается, работает только вот такой вариант с Intent.FLAG_ACTIVITY_NEW_TASK
Intent mIntent;
mIntent = new Intent(intent.ACTION_MAIN, null, context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
mIntent.putExtra("TimeSMSsent", TimeSMSsent);
mIntent.putExtra("TimeNow", TimeNow);
mIntent.putExtra("ServCentr", ServCentr);
context.startActivity(mIntent);
у меня не получается, работает только вот такой вариант с Intent.FLAG_ACTIVITY_NEW_TASK
Intent mIntent;
mIntent = new Intent(intent.ACTION_MAIN, null, context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
mIntent.putExtra("TimeSMSsent", TimeSMSsent);
mIntent.putExtra("TimeNow", TimeNow);
mIntent.putExtra("ServCentr", ServCentr);
context.startActivity(mIntent);
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Как определить что Activity уже запущена?
Это должно помочь http://developer.android.com/reference/ ... entFilter)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Как определить что Activity уже запущена?
вот так объявлен в манифесте
<activity android:name=".SmsWindow"
android:label="@string/title_sms_window"
android:theme="@android:style/Theme.Dialog"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="standard">
</activity>
<activity android:name=".SmsWindow"
android:label="@string/title_sms_window"
android:theme="@android:style/Theme.Dialog"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="standard">
</activity>
Re: Как определить что Activity уже запущена?
прочитал ссылку, понятнее не сталоKamiSempai писал(а):Это должно помочь http://developer.android.com/reference/ ... entFilter)
регистрация широковещательных сообщений может быть произведена как в программе, так и в манифесте (у меня через манифест), а как корректно вызвать из броадкаста (или любой другой функции) активити, причем несколько раз (первый раз активити просто запускается, второй и последующие - в ней обновляется инфа) - это не понятно
Re: Как определить что Activity уже запущена?
похоже разобрался, по крайней мере тест отработал
1) в манифесте вызываемую активити прописал вот с такими параметрами
<activity android:name=".SmsWindow"
android:label="@string/title_sms_window"
android:theme="@android:style/Theme.Dialog"
android:launchMode="singleTop">
</activity>
2) в Broadcast вызов активити сделал следующим образом
mIntent = new Intent(context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
context.startActivity(mIntent);
3) в вызываемой активити переопределил метод
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
Log.d(MyLog, "----------------------ТЕСТ---------------------------");
}
все работает, спасибо что помогли разобраться, буду дальше кодить
1) в манифесте вызываемую активити прописал вот с такими параметрами
<activity android:name=".SmsWindow"
android:label="@string/title_sms_window"
android:theme="@android:style/Theme.Dialog"
android:launchMode="singleTop">
</activity>
2) в Broadcast вызов активити сделал следующим образом
mIntent = new Intent(context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
context.startActivity(mIntent);
3) в вызываемой активити переопределил метод
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
Log.d(MyLog, "----------------------ТЕСТ---------------------------");
}
все работает, спасибо что помогли разобраться, буду дальше кодить
Re: Как определить что Activity уже запущена?
возник еще один вопрос по этой же теме
1) приложение ЗАПУЩЕНО
- поступает смс, броадкаст его перехватывает и запускает окно с активити, отрабатывает метод onCreate() (окно я не закрываю)
- поступает второе смс, броадкаст его перехватывает, запускает активити, в нем уже отрабатывает другой метод onNewIntent()
тут все хорошо...
2) приложение ЗАКРЫТО
- поступает смс, броадкаст перехватывает, стартует активити (я его так же не закрываю), стартует метод onCreate
- поступает вторая смс, броадкаст его перехватывает...и все...метод onNewIntent() не запускается, почему так?
сделал логи с выводом в LogCat, видно что запуск активити из броадкаста отрабатывает, но ни чегоне происходит
на всякий случай выложу код
Манифест, так обозначен вызываемый класс
<activity android:name=".SmsWindow"
android:label="@string/title_sms_window"
android:theme="@style/AppTheme"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop">
</activity>
вот так он вызывается из броадкаста
mIntent = new Intent(context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
mIntent.putExtra("TimeSMSsent", TimeSMSsent);
mIntent.putExtra("TimeNow", TimeNow);
mIntent.putExtra("ServCentr", ServCentr);
context.startActivity(mIntent);
вот так в нем прописан метод onNewIntent
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
//бла-бла-бла
}
закрытие активити происходит через метод finish()
1) приложение ЗАПУЩЕНО
- поступает смс, броадкаст его перехватывает и запускает окно с активити, отрабатывает метод onCreate() (окно я не закрываю)
- поступает второе смс, броадкаст его перехватывает, запускает активити, в нем уже отрабатывает другой метод onNewIntent()
тут все хорошо...
2) приложение ЗАКРЫТО
- поступает смс, броадкаст перехватывает, стартует активити (я его так же не закрываю), стартует метод onCreate
- поступает вторая смс, броадкаст его перехватывает...и все...метод onNewIntent() не запускается, почему так?
сделал логи с выводом в LogCat, видно что запуск активити из броадкаста отрабатывает, но ни чегоне происходит
на всякий случай выложу код
Манифест, так обозначен вызываемый класс
<activity android:name=".SmsWindow"
android:label="@string/title_sms_window"
android:theme="@style/AppTheme"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop">
</activity>
вот так он вызывается из броадкаста
mIntent = new Intent(context, SmsWindow.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIntent.putExtra("NomerSMS", NomerSMS);
mIntent.putExtra("BodySMS", BodySMS);
mIntent.putExtra("TimeSMSsent", TimeSMSsent);
mIntent.putExtra("TimeNow", TimeNow);
mIntent.putExtra("ServCentr", ServCentr);
context.startActivity(mIntent);
вот так в нем прописан метод onNewIntent
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
//бла-бла-бла
}
закрытие активити происходит через метод finish()
Re: Как определить что Activity уже запущена?
хм, вопрос снят
проблема решилась всего лишь заменой
singleTop на singleTask в манифесте
проблема решилась всего лишь заменой
singleTop на singleTask в манифесте