Возобновить верхнюю активность, а не запускать Launcher Activity
У меня есть два действия в Моем приложении, один из которых запускается, а другой запускается как явный вызов от первого.
Здесь моя проблема, когда я возвращаюсь на главный экран, нажимая домашний ключ из второго действия и запуская приложение, снова запускается первое действие, даже если второе действие уже находится в фоновом режиме.
Первое действие записывается для загрузки необходимых активов для работы приложения, как только они загружаются, он запускает второе действие и вызывает завершение для себя.
Ниже представлен мой манифест приложения.
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<! Download the Required Assets if not found on SD Card -->
<activity android:name=".ContentDownload"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|locale"
android:launchMode="singleTask"
android:alwaysRetainTaskState="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".ActualAppActivity"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|locale"
android:launchMode="singleTask"
android:alwaysRetainTaskState="true"
/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"/>
Может ли кто-нибудь, пожалуйста, направить меня на то, как сделать второе действие получить контроль напрямую, вместо того чтобы проходить первый раз, если запускается пусковая установка, и она находится в фоновом режиме.
Ниже мой метод обратного вызова onResult.
public void onResult(String assetPath, int result)
{
if(result == RESULT_OK)
{
startActivity(new Intent(this, ActualAppActivity.class));
activity.destroyDownloadActvity();
finish();
}
else
{
finish();
java.lang.System.exit(0);
}
activity.destroyDownloadActvity();
activity = null;
}
Ответы
Ответ 1
Попробуйте использовать следующий код в методе onCreate для операции, которая указана в качестве действия Launcher в манифесте, т.е. действие ContentDownload из исходного кода, отправленного в вопрос:
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
Это закончит вашу деятельность Launcher перед ее отображением, обнаружив, что уже запущена задача, и вместо этого ваше приложение должно вернуться к последнему видимому действию.
См. эту страницу в документации на Android в отношении Android Manifest launchModes: http://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode
Ответ 2
У вас есть оба действия, определенные с помощью launchMode="singleTask"
. Это корень вашей проблемы. Удалите это.
Ответ 3
Я использую следующий код в LAUNCHER
Действиях моих приложений, чтобы предотвратить повторное запуск приложения, когда он все еще жив в фоновом режиме, и значок отображается
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isTaskRoot()) {
finish();
return;
}
// Rest of your onCreate stuff goes here
}
Это завершает работу LAUNCHER
и возобновляет последний использованный.
Ответ 4
Не называть finish(). Вам необходимо передать флаг Intent FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_NEW_TASK.
Intent intent = new Intent(this, ActualAppActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Ответ 5
Не видя своего кода, я думаю, вам нужно что-то вроде этого:
Android завершает действие и запускает другой
Вам нужно установить intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
, и вам также понадобится finish()
ваша активность запуска.
Ответ 6
спасибо, предложите мне решение, я встретил эту ошибку, полагаясь на некоторые условия. Во-первых, установка приложения с SD-карты; во-вторых, нажмите "открыть" btn после установки, а не "завершить" btn; в-третьих, откройте другое действие, которое не является активным Luncher, затем нажмите "домой", чтобы перейти на рабочий стол Android. "Активное действие Luncher" откроется при повторном открытии приложения.
Ответ 7
что вы можете сделать, это сохранить строку в постоянном хранилище, которая определяет, были ли загружены активы до или без.
Затем в основном действии вы можете проверить, загружены ли активы или нет, а затем запустить требуемую активность.
if(assets_already_downloaded)
second_activity();
else
download_asset_activity();