gpt4 book ai didi

android - 启动 Activity 不会将应用程序置于前台

转载 作者:太空狗 更新时间:2023-10-29 14:20:20 24 4
gpt4 key购买 nike

我从 Activity 调用电话,通话结束后我想返回应用程序。我尝试了 stackoverflow 上所有可用的解决方案。其中一个曾经工作了几分钟,但现在不工作了。

我尝试使用 recreate() 方法成功调用了 ActivityonCreate 方法,但应用程序不在前台。我尝试使用各种标志,例如 FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NO_HISTORY。但不起作用。

从调用应用程序返回应用程序的代码:

private class PhoneCallListener extends PhoneStateListener {

private boolean isPhoneCalling = false;

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

// If call ringing
if (state == TelephonyManager.CALL_STATE_RINGING) {

}
// Else if call active
else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {

isPhoneCalling = true;
}
// Else if call idle
else if (state == TelephonyManager.CALL_STATE_IDLE) {

if (isPhoneCalling) {

isPhoneCalling = false;

MyActivity.this.recreate();
}
}
}
}

最佳答案

这是我的解决方案,它在 4.3 上完美运行 - 其他操作系统版本尚未测试,但一切都应该没问题。

MainActivity 中注册监听器:

TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
listener = new ListenToPhoneState();
tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

来自 MainActivty 的 PhoneStateListener:

private class ListenToPhoneState extends PhoneStateListener {

private String LOG_TAG = "mainactivity";
private boolean isCallFinished = false;

public void onCallStateChanged(int state, String incomingNumber) {
if (TelephonyManager.CALL_STATE_RINGING == state) {
Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
}
if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
// wait for phone to go offhook (probably set a boolean flag) so
// you know your app initiated the call.
isCallFinished = true;
Log.i(LOG_TAG, "OFFHOOK");
}
if (TelephonyManager.CALL_STATE_IDLE == state) {
// when this state occurs, and your flag is set, restart your
// app
if (isCallFinished) {
isCallFinished = false;
Intent i = new Intent(getApplicationContext(),
MainActivity.class);
// this needs if you want some special action after the phone call
//ends, that is different from your normal lauch configuration
i.setAction("SHOW_PHONE_CALL_LIST");
startActivity(i);
finish();
}
Log.i(LOG_TAG, "IDLE");
}
}

}

我从一个 fragment 开始打电话,但这没有任何区别:

Uri uri = Uri.parse("tel:" + Uri.encode(callIt));
Intent intent = new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);
getActivity().finish();

您必须在启动通话的 Activity 上调用 finish(),否则在通话结束后,您的应用将保持默认的电话应用。

当您的应用程序启动时,您可以查看intent,并且可以设置您的after call 配置。在您的 onCreate() 方法中调用它:

if (intent.getAction().equals("SHOW_PHONE_CALL_LIST")) {
//perfom after call config here
}

我希望一切都解释清楚。

关于android - 启动 Activity 不会将应用程序置于前台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17669842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com