Rilevazione dell'evento di chiamata in output e di chiamata in android

Ho un requisito in cui voglio individuare due tipi di events legati alle chiamate in Android

  1. Ogni volta che viene effettuata una chiamata in output, la mia applicazione deve conoscere questo insieme con il numero chiamato
  2. Quando la chiamata viene bloccata (a causa di successo / fallimento), la mia applicazione dovrebbe conoscere questo insieme con il motivo di hangup

È ansible in Android? Sono nuovo alla piattaforma Android, quindi avrò bisogno di alcuni buoni tutorial dettagliati per guidarmi attraverso questo

  • creando un text in striscia in Android?
  • Perché "URI di logging Android Studio" non è registrata?
  • Visualizzazione del messaggio di mattina, pomeriggio, sera, notte basata su Time in java
  • Problemi con rxjava-android
  • come implementare l'acquisto in-app nella mia applicazione Android?
  • L'emulatore Android non si avvia
  • Grazie

  • Come impostare dynamicmente l'attributo layout_weight dal codice?
  • Trasferimento di file utilizzando smack in applicazioni Android.
  • Android: button button evento
  • L'image di Android ottiene il colore del pixel dall'image scalata
  • Problema di scala di Android ImageView e traduzione
  • Come gonfiare più istanze di un layout con lo stesso ID all'interno di un layout gonfiato
  • 3 Solutions collect form web for “Rilevazione dell'evento di chiamata in output e di chiamata in android”

    È necessario creare un BroadcastReceiver:

    public class CallReciever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals( TelephonyManager.EXTRA_STATE_RINGING)) { // Phone number String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); // Ringing state // This code will execute when the phone has an incoming call } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals( TelephonyManager.EXTRA_STATE_IDLE) || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals( TelephonyManager.EXTRA_STATE_OFFHOOK)) { // This code will execute when the call is answered or disconnected } } } 

    Devi registrarti l'applicazione per ascoltare queste intenzioni nel manifesto:

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

    C'è una soluzione più semplice utilizzando solo TelephonyManager e PhoneStateListener. Non dovrai neppure registrare un BroadcastReceiver.

     public class MyPhoneStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { //Hangup case TelephonyManager.CALL_STATE_IDLE: break; //Outgoing case TelephonyManager.CALL_STATE_OFFHOOK: break; //Incoming case TelephonyManager.CALL_STATE_RINGING: break; } } } 

    E per registrarla:

     public static void registerListener(Context context) { ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } 

    È necessario creare un ricevitore per le seguenti azioni intenti:

    1. Chiamata in output – ACTION_NEW_OUTGOING_CALL
    2. Call hangup – ACTION_PHONE_STATE_CHANGED
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.