Страница 1 из 1

Как определить что Activity уже запущена?

Добавлено: 14 янв 2015, 10:08
grem17
Всем привет
вопрос такой - в классе надо сделать разветвление:
1) если активити не существует - то создать ее
2) если существует - то изменить находящийся в ней TextView

не могу понять как именно сделать такое разветвление?

что то типа:
if activity.существует==true {
bla-bla-bla
}else{
bla-bla-bla
}

Re: Как определить что Activity уже запущена?

Добавлено: 16 янв 2015, 14:53
KamiSempai
Это делается через флаги при запуске Activity. Кажется Intent.FLAG_ACTIVITY_SINGLE_TOP.
Если использовать этот флаг, и Activity уже запущена и отображается на экране, Новая Activity не запустится, а вызовется метод onNewIntent в ранее запущенной Activity.

Если Activity находится не на верху стека(скрыта другой Activity) можно попробовать добавить флаг FLAG_ACTIVITY_REORDER_TO_FRONT. На счет этого я не уверен, не пробовал.

Re: Как определить что Activity уже запущена?

Добавлено: 18 янв 2015, 22:24
Foenix
Для того, чтобы запустить активити, или вывести активити наверх из стека, если оно уже запущено - использовать флаг NEW_TASK_LAUNCH в методе startActivity()

Re: Как определить что Activity уже запущена?

Добавлено: 19 янв 2015, 12:40
grem17
а как запустить 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);

Re: Как определить что Activity уже запущена?

Добавлено: 19 янв 2015, 13:29
KamiSempai

Re: Как определить что Activity уже запущена?

Добавлено: 19 янв 2015, 13:53
grem17
вот так объявлен в манифесте

<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 уже запущена?

Добавлено: 20 янв 2015, 10:00
grem17
KamiSempai писал(а):Это должно помочь http://developer.android.com/reference/ ... entFilter)
прочитал ссылку, понятнее не стало :)
регистрация широковещательных сообщений может быть произведена как в программе, так и в манифесте (у меня через манифест), а как корректно вызвать из броадкаста (или любой другой функции) активити, причем несколько раз (первый раз активити просто запускается, второй и последующие - в ней обновляется инфа) - это не понятно

Re: Как определить что Activity уже запущена?

Добавлено: 20 янв 2015, 11:04
grem17
похоже разобрался, по крайней мере тест отработал

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 уже запущена?

Добавлено: 23 янв 2015, 11:24
grem17
возник еще один вопрос по этой же теме

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 уже запущена?

Добавлено: 23 янв 2015, 13:20
grem17
хм, вопрос снят
проблема решилась всего лишь заменой
singleTop на singleTask в манифесте