gpt4 book ai didi

Android 如何最小化通话屏幕并向前移动我自己的任务 - Android 10 (2.3.3)

转载 作者:行者123 更新时间:2023-11-29 01:46:40 24 4
gpt4 key购买 nike

感觉这个问题已经被问了很多次,但没有一个符合我的需求,没有一个解决方案适合我。

我有一个应用程序,其类扩展到 PhoneStateListener 以监听以下状态:

  • CALL_STATE_RINGING(这里我设置了一个带有来电号码的全局字符串变量)
  • CALL_STATE_OFFHOOK(在这里我想将我的任务/流程移到最前面,以便用户在屏幕上看到我的应用程序以及调用者的详细信息,而不是在“通话中”屏幕上)

我需要一种方法来最小化通话中屏幕(进入通知区域)我知道可以做到(有证据)但我不知道该怎么做最小化后,我应该能够将我的任务移到前面,而之前移到了后面。

我的应用程序启动,用户登录并通过按住后退按钮,用户保持登录状态但应用程序移至后台。如果有来电,我想看看来电者的电话号码是否存在于我的应用程序中(该应用程序保留了一些用户信息),然后在 In Call Screen 最小化后转到用户信息。

当我在 CALL_STATE_OFFHOOK 状态下运行此代码时,调用被最小化并且 map 以全屏方式加载(证明)

public String IncomingTelephoneNumber;
private class CallStateListener extends PhoneStateListener {

@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING: {
IncomingTelephoneNumber = incomingNumber;
break;
}
case TelephonyManager.CALL_STATE_OFFHOOK: {
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
activity.startActivity(intent);
break;
}
}
}
}

无法获得 map 源代码。以同样的方式我想这样做,但是对于我自己的应用程序,我尝试了这个,但是不起作用,In Call Screen 仍然在应用程序的前面(或者根本没有调用应用程序)。代码没有损坏或任何东西,只是我的应用程序没有出现。

public String IncomingTelephoneNumber;
private class CallStateListener extends PhoneStateListener {

@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING: {
IncomingTelephoneNumber = incomingNumber;
break;
}
case TelephonyManager.CALL_STATE_OFFHOOK: {
try {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(270532608);//This is the flag which is used from the Launcher, LogCat helped here //flg=0x10200000
intent.setClassName(activity.getPackageName(), Splash.class.getCanonicalName());
activity.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}
}

我已经尝试过其他方法让应用程序回到前台,但没有用。

我看到了this post ,但始终没有解决方案。

我使用的是Android版本10,因为所用设备需要它(三星P-1000平板电脑,Android 2.3.3是最新的官方版本)

任何帮助将不胜感激。它可能是火车撞车或需要调用的非常简单的事情。但我希望这样做,就像 map 那样。

编辑:我遇到了一个最小化通话屏幕的解决方案(不是最好的解决方案,但它有效)

public String IncomingTelephoneNumber;
private class CallStateListener extends PhoneStateListener {

@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING: {
IncomingTelephoneNumber = incomingNumber;
break;
}
case TelephonyManager.CALL_STATE_OFFHOOK: {
try {
//This will simulate pressing the Home button
//Thus Minimizing the In Call Screen
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(startMain);

//This is the part still not working Correctly
//Moving my Task/Process to the Front for the user to see
//This is Android 10, I still can not find a solution to move task to front
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName(activity, Splash.class.getCanonicalName());
activity.startActivity(intent);
} catch (Exception e) {
Log.v("", "e: " + e.getMessage());
e.printStackTrace();
}
break;
}
}
}
}

最佳答案

我找到了解决我的特定问题的方法,在尝试了各种不同的设置并阅读了论坛之后,这就是我想出的并在 Android GingerBread 2.3.3(版本 10)

上工作

为了最小化通话并转到主屏幕,我这样做了

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(startMain);

我决定不使用上面的,只使用下面的基本上完全符合我需要的(解决方案分为两部分,Intent 代码和 Android Manifest 文件中的代码)

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//Here the activity class in Question "JobDetail"
intent.setClassName(activity.getPackageName(), JobDetail.class.getCanonicalName());

//These extras I add and then use them in my
//JobDetail class to show the specific details for the caller
intent.putExtra("JobId", JobId);
intent.putExtra("FromCall", "true");
activity.startActivity(intent);

list 部分

<activity android:name="JobDetail" android:configChanges="orientation|keyboardHidden"
android:taskAffinity="" android:launchMode="singleInstance"
android:alwaysRetainTaskState="true" />

在 Manifest 文件中的特定 Activity 类下(在我的例子中是通过 InCallScreen 显示的),添加以下三个属性/标签

  • android:taskAffinity=""(我不确定这是否有任何作用,但我将其留在那里)
  • android:launchMode="singleInstance"(我认为这将启动一个全新的 Activity 实例,但只有这个选项和上面的 Intent,我发现它会重新启动整个应用程序并且因此添加最后一个属性/标签)
  • android:alwaysRetainTaskState="true"(这确保它直接打开 Activity 类,而不是重置整个应用程序)

在此之后,处理您的后退键,以防您启动的 Activity 类深入到另一个父 Activity 中的应用程序等。

还发现使用 moveTaskToBack(true); 来最小化您的应用程序在 Gingerbread 中效果不佳。我不知道这背后的所有技术细节,但这告诉我,有问题的应用程序被移到了堆栈的后面,因此发现把你的任务放到前面并不是一件容易的事。 而是使用以下 intent 调用(模拟按下主页按钮,light-hide 您的应用程序,不让用户看到)。

@Override
public void onBackPressed() {
//moveTaskToBack(true);
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
//Show toast to notify the user that your application is still running in the background
return;
}

我希望这能帮助那些和我一样在旧硬件和旧软件上遇到同样问题的人。

关于Android 如何最小化通话屏幕并向前移动我自己的任务 - Android 10 (2.3.3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21030832/

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