2016-04-27 9 views
0

Ich arbeite an einer SIP-Telefon-App und es gibt Netzwerkereignisse wie eingehende Anrufe von einem sticky Hintergrunddienst weitergeleitet. Wenn dies passiert, öffne ich eine IncomingCallActivity, die die üblichen Steuerelemente wie "Antwort", "Ablehnen", "Abweisen" (zu Sprachbox) und so weiter zeigt."Eingehender Anruf" Aktivität kann nicht auf Home gedrückt werden Drücken Sie

Während dies alles perfekt funktioniert, sogar eine Benachrichtigung beim Drücken der Home-Taste (damit Sie den eingehenden Anruf nicht verlieren), kommt es manchmal vor, dass Android meine Aktivität tötet, sobald ich "Home" drücke.

Nun, das ist schlecht, es gibt mehrere Netzwerk-Dinge angeschlossen und die Benachrichtigung, wenn geklickt, hat nichts zu zeigen, wenn Sie darauf klicken.

In dem Manifest, hat die Aktivität

android:launchMode="singleTask" 

zu vermeiden, dass die Benachrichtigung erzeugt immer eine neue Instanz des eingehenden Anrufs.

Während ich über savedInstanceState Bundle weiß, sehe ich diese Aktivität als eine Art "Special" -> Also, gibt es eine Möglichkeit, Android zu zwingen, meine Aktivität am Leben zu erhalten, während mindestens klingelt, sagen wir 30 Sekunden?

Was ich versucht:

@Override 
protected void onDestroy() { 
    if (answer_clicked || decline_clicked || hangUpDuringRing) 
     super.onDestroy(); 
} 

Dies war ein Versuch, nur "nicht Android sagen", dass es eine Destroy ist() anhängig. Es resultet in:

Uncaught application level exception. This is a crash point.                       
(+) java.lang.RuntimeException: Unable to stop activity 
android.util.SuperNotCalledException 

Gibt es einen anderen Ansatz, den ich für diesen speziellen Fall nehmen?

Vielen Dank im Voraus!

+0

Dies ist immer eine Möglichkeit. Alles, was nicht mit der "Aktivität" zerstört werden sollte, sollte dem "Service" gehören. –

+0

Kann ein Dienst Audio abspielen - bin ich mir da nicht sicher? Es sind Dinge wie der Klingelton, der von der Aktivität abgespielt wird, der aufhört, wenn er zerstört wird ... Ich würde sogar eine Lösung wählen, um die HOME-Taste (und die BACK-Taste) während des Klingelns zu deaktivieren. – Grisgram

+0

[Yep.] (Http://www.helloandroid.com/tutorials/musicdroid-audio-player-part-ii) (Obwohl dieses Tutorial ziemlich alt ist. Vielleicht möchten Sie 'SoundPool' anstelle von' MediaPlayer' verwenden.) –

Antwort

0

Es scheint, dass mein Problem gelöst werden kann, indem einfach das Attribut persistent auf der Aktivität in der manifest verwendet wird.

<activity 
     android:name=".ui.RingingActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:launchMode="singleTask" 
     **android:persistent="true"** 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme.NoActionBar"> 
    </activity> 

Ich wusste nicht darüber (ich bin noch neu in Android), aber keine zerstörten Aktivitäten seit ich das benutze.

Verwandte Themen