Android - возобновить активность из другого приложения
У меня есть два приложения A(деятельность A1, A2, A3) и B(деятельность B1, B2). Мой процесс таков:
A1 -> A2 -> A3 -> B1 -> B2
У меня вопрос: из упражнения B2, как вернуться к существующему мероприятию A3 - не создавать новое занятие A3 - например, переключение 2 приложений с помощью кнопки с несколькими задачами?
Спасибо,
4 ответа
Вам нужен singleTop, чтобы действие всегда использовало один и тот же экземпляр, тогда в этом действии onNewIntent будет запускаться всякий раз, когда мы возвращаемся туда из другого действия (через намерение)
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="..." >
<application ...>
<!-- android:launchMode="singleTop" makes sure we reuse the same instance -->
<activity android:name=".A3Activity" android:label="@string/app_name"
android:launchMode="singleTop">...</activity>
...
</application>
public class A3Activity extends Activity {
@Override
protected void onNewIntent(Intent intent) {
//This is triggered onyl when re-launched
super.onNewIntent(intent);
//do anything new here
}
}
public class B2Activity extends Activity {
public void someMethod() {
//This relaunches the A3 activity from same app
//Intent intent = new Intent(this, A3Activity.class);
//This does it from the other app
Intent intent = new Intent(
intent.setComponent(new ComponentName("com.anh", "com.anh.A3Activity"));
startActivity(intent);
}
}
Intent - это мощный механизм в Android, который позволяет вам запускать действия из другого процесса.
Вам просто нужно установить пакет и имя класса. Это все.
Например:
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example", "com.example.MyExampleActivity"));
startActivity(intent);
Также вам может понадобиться один экземпляр | режим запуска singleTask вашей Деятельности A3.
Когда вам нужно запустить A3, вам нужно настроить FLAG_ACTIVITY_REORDER_TO_FRONT для вашего намерения, и A3 будет переупорядочен вперед.
Как сделать IRC в Android: читайте здесь
Сначала добраться от B2 до B1 нужно
Intent intent = new Intent(this, B1.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("fromB",true);
startActivity(intent);
finish();
когда вы в B1 один в onCreate поставить это
Bundle b = getIntent().getExtras();
if(b.getBoolean()){
Intent intent = new Intent(this, A3.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("fromB",true);
startActivity(intent);
finish();
}
Я думаю, что это поможет:D
При перенаправлении на B1 -> B2 вызывается finish(); в деятельности B1..