Reprendre L'activité supérieure au lieu de commencer L'activité de lanceur

j'ai deux activités dans mon application, l'une étant lanceur et l'autre est lancé comme un appel explicite de la première.

ici mon problème est quand je retourne à l'écran d'accueil en appuyant sur la touche accueil de la deuxième activité et de lancer l'application, encore une fois la première activité est lancée même si la deuxième activité est déjà dans l'arrière-plan.

La première Activité est écrit pour télécharger les actifs nécessaires pour l'application de travail, une fois que les actifs sont téléchargés, il déclenche la deuxième activité et les appels se terminent par soi-même.

ci-dessous est mon manifeste de la demande.

<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"/>

est-ce que Quelqu'un peut s'il vous plaît me guider sur la façon de faire la deuxième activité gagner le contrôle directement au lieu de passer par le premier à nouveau si le lanceur est appelé et il est à l'arrière-plan.

ci-dessous est mon appel onResult de retour de la méthode.

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;
}
33
demandé sur Sudhaker 2012-07-30 16:30:16

6 réponses

essayez d'utiliser le code suivant dans la méthode onCreate de l'activité qui est spécifiée comme L'activité de lancement dans le Manifeste, c.-à-d. l'activité ContentDownload à partir du code original affiché dans la question:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
  finish();
  return;
}

cela terminera votre activité de lanceur avant qu'elle ne soit affichée en détectant qu'il y a déjà une tâche en cours, et votre application devrait plutôt reprendre la dernière activité visible.

voir cette page dans le Documentation Android concernant les modes de lancement Android Manifest: http://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode

33
répondu Jadent 2014-01-09 14:25:30

vos deux activités sont définies par launchMode="singleTask" . C'est la racine de votre problème. Supprimer ce.

11
répondu David Wasser 2012-07-30 15:02:14

j'utilise le code suivant dans les activités LAUNCHER de mes applis pour empêcher l'application de redémarrer quand elle est encore vivante en arrière-plan et que l'icône est tappée

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (!isTaskRoot()) {
        finish();
        return;
    }

    // Rest of your onCreate stuff goes here
}

cela vient de terminer l'activité LAUNCHER et reprend la dernière utilisée.

9
répondu Saenic 2016-08-10 16:27:06

Ne pas appeler finish(). Vous devez passer à L'intention du drapeau FLAG_ACTIVITY_CLEAR_TASK et 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);
4
répondu Uriel Frankel 2012-07-30 13:35:15

sans voir votre code, je pense que vous voulez quelque chose comme cette réponse:

Android terminer L'activité et commencer une autre

, Vous devez définir le intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); et vous aurez également besoin de finish() lanceur d'activité.

1
répondu themanatuf 2017-05-23 10:31:34

ce que vous pouvez faire est de stocker une chaîne dans le stockage persistant qui détermine si les actifs ont été chargés avant ou non.

Puis, dans l'activité principale, vous pouvez vérifier si les actifs ont été chargés ou non, et puis commencer à l'activité requis.

if(assets_already_downloaded)
  second_activity();
else
  download_asset_activity();
-1
répondu Tanuj Wadhwa 2012-07-30 12:36:58