如何获取 Android 中的最后一个拨出电话

How to get last outgoing call in Android

我正在使用一个应用程序,该应用程序使用 Android Intent class 来拨打电话。

我可以成功地创建一个号码的呼叫,所以这是有效的。

我现在想要的是在 TextView 中显示最后拨出的电话号码。 我还让 TextView 可以点击,这样我就可以通过点击重拨号码。

我正在使用 CallLog.Calls.getLastOutgoingCall(getApplicationContext());获取最后一个被叫号码。 这在我的应用程序中只有效一次。

我启动应用程序,输入一个号码,然后它就会拨打电话。我在 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);
        }
    });
}

}

根据 activity lifecycleonCreate() 仅被调用一次,不会 运行 每次您的应用程序出现时 - 这意味着您的 getLastOutgoingCall() 是正确的第一次,但第二次不一定有效。

如果你想在每次出现 activity 时都 运行 一些东西,你应该将它移到 onResume() - 这样可以确保它始终是最新的:

String lastCalledNumber;

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

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