2016-04-07 4 views
0

Ich möchte einige Zahlen innerhalb eines Arrays aufrufen. Also habe ich sie in einen Loop gelegt und mit einer Absicht die Call App gestartet. Mit dem phonecalllistener gehe ich zurück zu meiner Aktivität, wenn der Anruf beendet ist, aber mein Problem ist, dass die Schleife von vorn beginnt und ich erneut auf die Schaltfläche klicke.rufen Sie eine Liste von Telefonnummern und gehen Sie zurück zu der Aktivität

Kann ich dieses Problem mit einem Bündel lösen? Und wie? Wie kann ich meinen Loopstatus speichern, wenn die Aktivität neu gestartet wird?

Ich habe auch die richtigen Berechtigungen im Manifest (CALL_PHONE und READ_PHONE_STATE) geschrieben

public class MainActivity extends Activity { 

final Context context = this; 

private Button button; 
public int g = 0; 
public String[] nummern = new String[10]; 


public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button) findViewById(R.id.buttonCall); 
    nummern[0] = "tel:06746468156"; 
    nummern[1] = "tel:06991046460"; 
    nummern[2] = "tel:06504146464"; 

    PhoneCallListener phoneListener = new PhoneCallListener(); 
    TelephonyManager telephonyManager = (TelephonyManager) this 
      .getSystemService(Context.TELEPHONY_SERVICE); 
    telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 

    // add button listener 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
       for (g = 0; g <= nummern.length-1; g++) { 

        Intent callIntent = new Intent(Intent.ACTION_CALL); 

        callIntent.setData(Uri.parse(nummern[g])); 
        startActivity(callIntent); 

       } 


     } 

    }); 

} 

private class PhoneCallListener extends PhoneStateListener { 

    private boolean isPhoneCalling = false; 

    String LOG_TAG = "LOGGING 123"; 


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

     if (TelephonyManager.CALL_STATE_RINGING == state) { 
      // phone ringing 
      Log.i(LOG_TAG, "RINGING, number: " + incomingNumber); 
     } 

     if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 
      // active 
      Log.i(LOG_TAG, "OFFHOOK"); 

      isPhoneCalling = true; 
     } 

     if (TelephonyManager.CALL_STATE_IDLE == state) { 
      // run when class initial and phone call ended, 
      // need detect flag from CALL_STATE_OFFHOOK 
      Log.i(LOG_TAG, "IDLE"); 

      if (isPhoneCalling) { 

       Log.i(LOG_TAG, "restart app"); 

       // restart app 
       Intent i = getBaseContext().getPackageManager() 
         .getLaunchIntentForPackage(
           getBaseContext().getPackageName()); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 

       isPhoneCalling = false; 
      } 

     } 
    } 
} 

}

+0

Juste speichern Sie Ihren Loop-Status, oder welche Telefonnummer wurden –

+0

aufgerufen Wie kann ich meine Loopstate speichern, wenn die Aktivität neu gestartet wird? – Marco

+0

Wenn ich Ihren Code richtig verstanden habe, starten Sie die App nach dem Anruf neu? warum tust du das ? Sie könnten einfach die nächste Nummer von dort anrufen, anstatt die App neu zu starten – JonasCz

Antwort

0

Von Ihrem Button-Klick-Listener, rufen startActivityForResult (Intent Absicht, int requestCode) mit der ersten Nummer sollte als intent-Daten übergeben werden, sobald der Aufruf abgeschlossen ist, wird die Methode "onActivityResult (int requestCode, int resultCode, Intent data)" aufgerufen und von dieser Methode aus können Sie die Aktivität erneut starten. Sie können die Logik entsprechend anwenden.