Android – incorporando la scena Unity3d in attività – è necessario annullare la logging del ricevitore?

Sono stato un membro di SO per un po 'di tempo ma non ho mai fatto una domanda, quindi qui va ..

Il mio objective

Sto cercando di creare un'applicazione Android con due attività. La prima è una schermata di menu (utilizzando gli elementi UI standard Android) con un button che apre l'attività di gioco. L'attività di gioco avrà alcuni elementi standard UI Android e un FrameLayout contenente una scena 3D di Unity.

  • Come distriggersre il button di alimentazione?
  • onLocationChanged non viene chiamato automaticamente
  • I numbers di linea mancanti di Retro Proguard
  • Eccezione di sicurezza accedendo al wifi in android
  • Come sostituire l'elenco a discesa MultiAutoCompleteTextView
  • Android: come posizionare ListView in XML?
  • Sto utilizzando Unity 5 e Eclipse Luna.

    Quello che ho lavorato

    Ho fatto la schermata del menu con un semplice button per avviare la seconda attività. Ho seguito questo tutorial e sono riuscito a get la mia scena Unity incorporata nella mia seconda attività. Finora tutto buono …

    Il problema

    La prima volta che inizio l'attività del gameplay funziona bene (posso vedere la scena Unity incorporata nel mio FrameLayout) ma se chiudo l'attività (per ritornare all'attività del menu) e poi inizia l'attività del gameplay, ottengo questo errore .. .

    Activity has leaked IntentReceiver com.unity3d.player.UnityPlayer$17@41866de0 that was originally registered here. Are you missing a call to unregisterReceiver()? 

    Quello che ho provato

    Ho fatto molta ricerca online e sembra che devo call qualcosa di simile in onPause o onDestroy ;

     m_UnityPlayer.currentActivity.unregisterReceiver(receiver); 

    … ma non so cosa sia il ricevitore in modo da non posso fare riferimento alla mia chiamata non registrata . Ho provato a creare un BroadcastReceiver, registrandolo e poi annullandolo su Pausa ma non fa alcuna differenza.

    Ho trovato un post sul forum di unità che chiede la stessa domanda ma, frustrante, è senza risposta (molte domande sul forum Unity sembrano essere senza risposta, ecco perché sono venuto qui con questa domanda).

    Ho anche provato a call questo metodo in onDestroy, ma in realtà esce tutta l'applicazione quando chiudo l'attività di gioco.

     m_UnityPlayer.quit(); 

    Esempio di codice

    Ecco il codice per la mia attività di gioco (ho rimosso le importzioni per chiarezza);

     public class MyEmbeddedUnityActivity extends Activity { private UnityPlayer m_UnityPlayer; IntentFilter filter = new IntentFilter(""); private BroadcastReceiver bRec = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //String action = intent.getAction(); Log.d("", "onReceive intent: " + intent); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_embedded_unity); if(m_UnityPlayer==null){ m_UnityPlayer = new UnityPlayer(this); int glesMode = m_UnityPlayer.getSettings().getInt("gles_mode", 1); m_UnityPlayer.init(glesMode, false); m_UnityPlayer.currentActivity.registerReceiver(bRec, filter); FrameLayout layout = (FrameLayout) findViewById(R.id.my_frame); LayoutParams lp = new LayoutParams(200, 300); layout.addView(m_UnityPlayer, 0, lp); } } public void onWindowFocusChanged(boolean hasFocus){ super.onWindowFocusChanged(hasFocus); m_UnityPlayer.windowFocusChanged(hasFocus); } @Override public void onDestroy (){ //m_UnityPlayer.quit(); m_UnityPlayer.currentActivity.unregisterReceiver(bRec); super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); m_UnityPlayer.configurationChanged(newConfig); } @Override protected void onResume() { super.onResume(); m_UnityPlayer.resume(); } @Override protected void onPause() { super.onPause(); m_UnityPlayer.pause(); } } 

    E infine…

    I passi che ho seguito per incorporare la scena Unity sono stati scritti nel 2011. L'integer process (di afferrare i file dalla zona di scena del progetto Unity e copiare i file in giro ecc.) Sembra veramente hacky e non documentato .

    C'è un modo migliore per incorporare le scene di Unity nelle attività Android con Unity 5? Sicuramente aggiungere una scena Unity a un'applicazione esistente è una cosa abbastanza comune da cercare di fare?

    Grazie, qualsiasi aiuto sarebbe molto apprezzato!

  • Modifica del text TextView
  • Come get il valore dell'asse x barra selezionato utilizzando MPAndroidChart?
  • C'è un modo per catturare l'azione Clear Data in modo programmato nell'applicazione?
  • Imansible risolvere il servizio di intenti target, Errore durante la consegna del messaggio: ServiceIntent non trovato
  • Perché "i pulsanti nelle barre dei pulsanti devono essere senza bordi" nel livello Android API Android?
  • Come rilevare se una networking è configurata come un hotspot mobile su Android?
  • One Solution collect form web for “Android – incorporando la scena Unity3d in attività – è necessario annullare la logging del ricevitore?”

    Quindi, ho fatto qualche ricerca e alla fine ho trovato una risposta, proprio qui su SO!

    Come discusso in questa risposta , aggiungendo questa row al manifesto risolve il problema;

     android:process=":UnityKillsMe" 

    così la parte rilevante del manifesto sembra così;

     ... <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".Studio" android:configChanges="orientation|keyboardHidden|screenSize" android:process=":UnityKillsMe" android:label="@string/title_activity_home" > </activity> ... 

    Questo impone l'avvio dell'attività del gameplay in un process separato. Ciò significa che puoi call m_UnityPlayer.quit() nel metodo onDestroy dell'attività senza che l'intera applicazione si chiude.

    Semplice fissaggio, ma fastidioso che sembra essere completamente privo di documenti.

    Spero che questo aiuti qualcuno!

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.