2010-03-19 4 views
8

J'ai une application déjà construite et je veux ajouter une fonctionnalité qui doit être démarrée quand un appel se termine. Comment puis-je y parvenir? Je pensais que déclarant dans mon manifeste quelque chose comme çaIntention d'être renvoyé lorsqu'un appel se termine?

<activity android:name="Filter"> 
    <intent-filter> 
      <category android:name="android.intent.SOMETHING" /> 
    </intent-filter> 
</activity> 

pourrait être suffisant, mais quel genre de Intent je dois mettre sur le filtre?

En regardant dans la documentation, j'ai trouvé seulement les intentions qui détectent quand un appel est lancé.

Est-ce que ce que je cherche est possible?

Répondre

16

Vous pouvez utiliser le PhoneStateLisenter pour écouter les modifications de l'état de l'appel.

Alors vous écoutez le changement LISTEN_CALL_STATE.

Avec la méthode onCallStateChanged.

Ainsi, lorsque les changements d'état de DECRO à IDLE démarrer votre application

+1

Mmm ... Je voulais que cette intention puisse être interceptée même lorsque mon application n'est pas démarrée, comme une intention de diffusion. Est-ce possible? – lbedogni

+0

Il n'y a aucune intention de système pour ceci Je crois que vous pourriez créer un petit service en arrière-plan qui écoute les changements d'état d'appel et quand il passe de OFFHOOK à IDLE envoyer un Intention personnalisée pour démarrer votre application –

+0

idée merci. – lbedogni

20

Je l'ai fait à l'aide d'un récepteur de radiodiffusion. Travaux! code ressemble à ceci -

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.gopi" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

     <receiver android:name=".IncomingCallTracker"> 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 

    </application> 
</manifest> 

L'extrait de code IncomingCallTracker ressemble -

public class IncomingCallTracker extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle bundle = intent.getExtras(); 

      Set<String> keys = bundle.keySet(); 
     for (String key : keys) { 
       Log.i("MYAPP##", key + "="+ bundle.getString(key)); 
     }  
    } 

} 

Vous pouvez chercher la clé 'Etat' dans le paquet. Lorsque sa valeur est 'IDLE', cela signifie que l'appel est terminé et que vous pouvez effectuer l'action que vous voulez en fonction de cela.

Questions connexes