【问题标题】:How to get last outgoing call in Android如何在Android中获得最后一个拨出电话
【发布时间】:2015-03-11 22:55:22
【问题描述】:

我正在使用一个使用 Android Intent 类来拨打电话的应用。

我可以成功创建对某个号码的呼叫,这样就可以了。

我现在想要的是在 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);
        }
    });
}

}

【问题讨论】:

    标签: java android android-intent android-studio


    【解决方案1】:

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

    如果您想在每次活动出现时运行某些内容,您应该将其移至 onResume() - 这可以确保它始终是最新的:

    String lastCalledNumber;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         // Same except without the `getLastOutgoingCall()`
    }
    
    @Override
    public void onResume() {
        lastCalledNumber = CallLog.Calls.getLastOutgoingCall(this);
    }
    

    【讨论】:

    • 对不起..我不明白你的意思.. :(我在这里设置电话号码 number.setText(TheNumber);
    • 好的!但是,当我单击 TextView 时,onResume 总是会获得最后一个拨出号码,同时它会在 TextView 中设置最后一个被叫号码吗?我想在单击 TextView 时重拨最后一个拨出号码。
    • 我收到此错误:java.lang.RuntimeException:无法恢复活动
    • 我修好了! :) 谢谢你的快速回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多