2017-01-17 2 views
2

machen Kann jemand von euch wissen, wie es möglich ist, zwei Anrufe in Folge zu machen? Nach dem Klicken auf eine Schaltfläche sollte die App die erste Nummer anrufen und danach sollte sie das erste Gespräch, das gerade beendet wurde, abhören und automatisch die zweite Nummer anrufen. Mit dem folgenden Code ruft er einfach die erste Nummer an.Wie man zwei Anrufe in Folge von einer Android-App

private void callBack(String phone) { 
    Intent callIntent = new Intent(Intent.ACTION_CALL) 
      .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    callIntent.setData(Uri.parse("tel:" + phone)); 
    callIntent.putExtra("com.android.phone.extra.slot", 1); 
    startActivity(callIntent); 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button b = (Button) this.findViewById(R.id.CallButton); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      callBack("111111111"); 
      callBack("222222222"); 
     }}); 
} 
+1

Dazu müssen Sie ausgehende Anrufe verarbeiten und callEndListener erkennen und beim ersten Anruf können Sie die zweite Nummer anrufen. –

+0

Anrufende-Hörer versuchen Ich habe nicht daran gearbeitet, aber es gibt eine ** ausstehende Absicht ** für das Anrufende. Legen Sie die nächste Anrufanforderung in den Empfänger. – Shuddh

Antwort

1

könnten Sie haben eine broadcastreceiver

public class EndCallReceiver extends BroadcastReceiver { 

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

    Bundle bundle = intent.getExtras(); 
    String phoneNumber= bundle.getString("incoming_number"); 
    if (phoneNumber == "first_number") { 
     //call second one 
    }  
    } 

} 

Sie haben würde, es registrieren auf Ihrem Manifest

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

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
1

knapp unter Klasse Put, die empfangen und verarbeiten Anruf

ausgestrahlt
public class PhoneStateBroadcastReceiver extends BroadcastReceiver { 

      Context mContext; 
      String incoming_nr; 
      private int prev_state; 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //TelephonyManager object 
       CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(); 
       telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); //Register our listener with TelephonyManager 
       mContext = context; 
      } 
      /* Custom PhoneStateListener */ 
      public class CustomPhoneStateListener extends PhoneStateListener { 

       @Override 
       public void onCallStateChanged(int state, String incomingNumber) { 

        if (incomingNumber != null && incomingNumber.length() > 0) incoming_nr = incomingNumber; 

        switch (state) { 
         case TelephonyManager.CALL_STATE_RINGING: 
          prev_state = state; 
          break; 
         case TelephonyManager.CALL_STATE_OFFHOOK: 
          prev_state = state; 
          break; 
         case TelephonyManager.CALL_STATE_IDLE: 
          if ((prev_state == TelephonyManager.CALL_STATE_OFFHOOK)) { 
           prev_state = state; 
           Toast.makeText(mContext, "Call End", Toast.LENGTH_SHORT).show(); 
           //Answered Call which is ended 
          } 
          if ((prev_state == TelephonyManager.CALL_STATE_RINGING)) { 
           prev_state = state; 
           //Rejected or Missed call 
          } 
          break; 

        } 
       } 
      } 
     } 

p ut Below Erlaubnis und registriert Empfänger in Manifest für Anruf Telefon und weiß Zustand, dass, wenn Ende oder nicht

<uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

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

Hinweis: - eine Bedingung gestellt, um eine zweite Reihe andere weise wählen soll es in Endlosschleife sein. - Sie müssen den Broadcast-Empfänger von der Aktivität/dem Fragment, bei dem die Anrufende-/Neustart-Aktion ausgeführt werden soll, registrieren bzw. die Registrierung aufheben.

+0

brauchen wir irgendwie CustomPhoneStateListener? –

+0

@YuriiTsap Ja, Sie können und auch verwenden Sie die Schnittstelle für die Verwendung Ergebnis von diesem Hörer –

+0

bekomme ich nicht ganz bekommen Sie. Meine Frage ist: Müssen wir etwas cleanUp durchführen, um Leckagen zu vermeiden? –

Verwandte Themen