I have two activities in My application, one being launcher and the other is launched as a explicit call from the first.
Here My problem is when i go back to home screen by pressing home key from second activity and launch the application, again the first activity gets initiated even though the second activity is already in the background.
The first Activity is written to download the required assets for the application to work, once the assets are downloaded it triggers the second activity and calls finish for self.
Below is my manifest of the application.
<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"/>
Can Somebody please guide me on how to make the second activity gain the control directly instead of going through the first again if launcher is called and it is in the background.
Below is my onResult Call back method.
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;
}
Do not call finish(). You need to pass to the Intent the flag FLAG_ACTIVITY_CLEAR_TASK and FLAG_ACTIVITY_NEW_TASK.
Try using the following code in the onCreate method of the activity that is specified as the Launcher Activity in the Manifest, i.e. the ContentDownload activity from the original code posted in the question:
This will finish your Launcher Activity before it is displayed by detecting that there is already a task running, and your app should instead resume to the last visible Activity.
See this page in the Android documentation regarding Android Manifest launchModes: http://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode
Without seeing your code, I think you want something like this answer:
Android finish Activity and start another one
You need to set
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
and you'll also need tofinish()
your launcher activity as well.what you can do is store a string in the persistent storage which determines whether the assets have been loaded before or not.
Then, in the main activity, you may check if the assets have been loaded or not and then start the required activity.
You've got both your activities defined with
launchMode="singleTask"
. This is the root of your problem. Remove that.I use the following code in the
LAUNCHER
Activities of my apps to prevent the app from beeing started again when its still alive in the background and the icon is tappedThis just finishes the
LAUNCHER
Activity and resumes the last used one.