2015-07-24 27 views
5

Ho bisogno del seguente problema da risolvere:Ripristino applicazione Unity3d Android con un'altra attività in cima

Dal UnityPlayerNativeActivity sto iniziando un'attività standard di Android (può essere il mio, può essere con un annuncio dalla rete pubblicitaria - non importa). Quando il gioco viene nascosta con questa attività in alto (non l'Unità uno) premendo il pulsante home, come utente Ho due modi di ripristino:

  • dallo schermo Recently used apps - l'applicazione è in fase di restauro allo stesso stato, quando è stato minimizzato (è quello che mi aspetto che accada);
  • dal programma di avvio, ciò che causa il ripristino del UnityPlayerNativeActivity del gioco con la perdita di tutte le altre attività, che sono state aperte su di esso.

Queste attività sono perse in qualche modo (in un modo che non so esattamente, cosa è successo con loro). La logica del mio gioco dipende dal risultato dei processi che stanno accadendo lì, cioè. Ho bisogno di sapere che questa particolare attività è stata abbandonata in un modo specifico (ad esempio, ad esempio una richiamata).

Sai come posso riportare questa attività Unity dal programma di avvio con tutte le attività sopra di esso, com'era mentre lo riducevo al minimo?

Voglio capire la differenza tra i modi di ripristinare l'app da Recently used screen e il programma di avvio. Immagino sia correlato alla sezione filtro intent nel file AndroidManifest.xml, incluso nella voce UnityPlayerNativeActivity.

risposta

2

La soluzione si è rivelata abbastanza semplice, ma non così evidente.

È risultato che la configurazione di AndroidManifest.xml generata da Unity per impostazione predefinita causa questo problema. Per l'attività principale che viene avviato dal programma di avvio i seguenti parametri sono definiti (tratto da app decompiled):

<activity 
     android:alwaysRetainTaskState="true" 
     android:clearTaskOnLaunch="true" 
     android:configChanges="locale|fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:name="com.unity3d.player.UnityPlayerNativeActivity" 
     android:screenOrientation="fullSensor" 
     launchMode="singleTask"> 

     <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true"/> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
      <category android:name="android.intent.category.LEANBACK_LAUNCHER"/> 
     </intent-filter> 
    </activity> 

Il comportamento problematico è provocato da questi 2 parametri:

android:clearTaskOnLaunch="true" 
    android:launchMode="singleTask" 

Quando l'ho cambiarli a:

android:clearTaskOnLaunch="false" 
    android:launchMode="standard" 

Quindi l'app sta riprendendo bene dal programma di avvio.

I parametri corretti dovrebbe essere impostato come segue:

<activity 
     android:alwaysRetainTaskState="true" 
     android:clearTaskOnLaunch="false" 
     android:configChanges="locale|fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode" 
     android:label="@string/app_name" 
     android:launchMode="standard" 
     android:name="com.unity3d.player.UnityPlayerNativeActivity" 
     android:screenOrientation="fullSensor" 
     launchMode="standard"> 

     <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true"/> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
      <category android:name="android.intent.category.LEANBACK_LAUNCHER"/> 
     </intent-filter> 
    </activity> 

Nota: Mentre io sono in grado di impostare il valore android:clearTaskOnLaunch="false" per questa attività in modo esplicito, il parametro launchMode sarà costretto da Unity3d e impostato su "singleTask" . Sono riuscito a cambiarlo e a controllarlo decompilando l'app e ricostruendo da queste risorse modificate. Mi chiedo se ci sia un modo elegante per impostare questo valore.