2015-03-11 3 views
-1

Я работаю с приложением, которое использует класс Android Intent для совершения вызовов.Как получить последний исходящий вызов в Android

Я могу успешно создать вызов номера, чтобы он работал.

Теперь я хочу показать последний номер исходящего вызова, который будет отображаться в TextView. Также я сделал так, чтобы TextView можно было щелкнуть, чтобы щелкнуть мышью. Я могу набрать номер.

Я использую CallLog.Calls.getLastOutgoingCall (getApplicationContext()); чтобы получить последний вызываемый номер. Это работает только один раз в моем приложении.

Я запускаю приложение, вводя номер и звоню. Первый исходящий вызываемый номер I установлен в TextView. После этого я ввожу второй номер, который успешно установлен в TextView , но, когда я нажимаю кнопку повторного набора, приложение вызывает первый номер!

Почему? Мое последнее исходящее число - второе. Почему он вызывает первый номер?

Также, если я перезапущу приложение, он повторно набирает второй исходящий номер.

Вот мой код:

public class MainActivity extends ActionBarActivity { 

Button btnCall; 
TextView number; 
EditText calledNumber; 


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

    btnCall = (Button) findViewById(R.id.button); 
    number = (TextView) findViewById(R.id.textView2); 
    calledNumber = (EditText) findViewById(R.id.editText); 

    //Gets the last outgoing number from the call log 
    final String lastCalledNumber = CallLog.Calls.getLastOutgoingCall(getApplicationContext()); 

    btnCall.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String TheNumber = calledNumber.getText().toString(); 
      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      callIntent.setData(Uri.parse("tel:" + TheNumber)); 
      startActivity(callIntent); 
      number.setText(TheNumber); 
     } 
    }); 

    //redial number in TextView by click 
    number.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent call = new Intent(Intent.ACTION_CALL); 
      call.setData(Uri.parse("tel:" + lastCalledNumber)); 
      startActivity(call); 
     } 
    }); 
} 

}

ответ

2

согласно activity lifecycle, onCreate() вызывается только один раз и не запускается каждый раз, когда появляется ваше приложение - это будет означать, что ваш getLastOnutgoingCall() бы правильна первый раз, но не обязательно будет работать во второй раз.

Если вы хотите, чтобы запустить что-то каждый раз, когда появляется активность, вы должны переместить его в onResume() - это гарантирует, что он всегда будет в курсе:

String lastCalledNumber; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // Same except without the `getLastOutgoingCall()` 
} 

@Override 
public void onResume() { 
    lastCalledNumber = CallLog.Calls.getLastOutgoingCall(this); 
} 
+0

Sorry..not уверен, я понимаю, что вы mean .. :( Im устанавливает номер вызова здесь number.setText (TheNumber); – Spoofy

+0

Ok! Но будет onResume всегда получать последний исходящий номер, когда я нажимаю TextView, в то же время его устанавливает последний вызываемый номер также в TextView ? Я хочу повторно набрать последний исходящий номер, нажав на TextView. – Spoofy

+0

Im получение этой ошибки: java.lang.RuntimeException: не удалось возобновить ac – Spoofy