如何获取 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 lifecycle,onCreate()
仅被调用一次,不会 运行 每次您的应用程序出现时 - 这意味着您的 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);
}
我正在使用一个应用程序,该应用程序使用 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 lifecycle,onCreate()
仅被调用一次,不会 运行 每次您的应用程序出现时 - 这意味着您的 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);
}