2010-03-19 11 views
8

Ho un'applicazione già creata e desidero aggiungere una funzionalità che deve essere avviata al termine di una chiamata. Come posso ottenerlo? ho pensato che dichiara nel mio manifesta qualcosa di simileL'intenzione di essere licenziata quando termina una chiamata?

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

potrebbe essere sufficiente, ma che tipo di Intent devo mettere sul filtro?

Guardando nella documentazione ho trovato solo le intenzioni che rileva quando viene avviata una chiamata.

È quello che sto cercando possibile?

risposta

16

È possibile utilizzare PhoneStateLisenter per ascoltare le modifiche nello stato della chiamata.

Così si ascolta la modifica LISTEN_CALL_STATE.

Con il metodo onCallStateChanged.

Così, quando i cambiamenti di stato da RIC.SGAN al minimo avviare l'applicazione

+1

Mmm ... Volevo che questo Intent potesse essere catturato anche quando la mia applicazione non è stata avviata, come un intento di trasmissione. È possibile? – lbedogni

+0

Non esiste un intento di sistema per questo, credo che potresti creare un piccolo servizio che viene eseguito in background in attesa di modifiche allo stato della chiamata e quando passa da OFFHOOK a IDLE invia un intento personalizzato per avviare l'applicazione –

+0

Pensa che potrebbe essere un buon idea grazie. – lbedogni

20

Ho fatto questo utilizzando un ricevitore broadcast. Lavori! codice è simile -

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> 

Il frammento di codice IncomingCallTracker sembra -

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)); 
     }  
    } 

} 

È possibile cercare la chiave 'stato' nel bundle. Quando il suo valore è 'IDLE' significa che la chiamata è terminata ed è possibile eseguire qualsiasi azione si desideri in base a questo.

Problemi correlati