感觉这个问题已经被分配了,但没有一个适合我的需要,也没有一个解决方案适合我。
我有一个应用程序,其类扩展为 PhoneStateListener 以侦听以下状态:
- CALL_STATE_RINGING(这里我用传入的电话号码设置了一个全局字符串变量)
- CALL_STATE_OFFHOOK(在这里我想将我的任务/进程移到前面,以便用户在屏幕上看到我的应用程序以及呼叫者的详细信息,而不是在呼叫屏幕上)
我需要一种方法来最小化通话中屏幕(进入通知区域)我知道它可以完成(有证明)但我不知道如何做它被最小化后,我应该能够将我的任务移动到前面移动到后面。
我的应用程序启动,用户登录并按住后退按钮,用户保持登录状态,但应用程序被移至后台。如果有来电,我想查看我的应用程序中是否存在来电者电话号码(应用程序保留了几个用户信息),然后在最小化通话屏幕后转到用户信息。
当我在 CALL_STATE_OFFHOOK 状态下运行此代码时,调用被最小化并且地图全屏加载(证明)
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;
}
}
}
}
获取地图源代码是不可能的。以同样的方式我想这样做,但是使用我自己的应用程序,我尝试了这个,但不起作用,调用屏幕仍然在应用程序前面(或者根本没有调用应用程序)。代码没有中断或任何东西,只是我的应用程序没有出现。
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;
}
}
}
}
我尝试了其他方法将应用程序带回前面,但不起作用。
我看到了这篇文章,但没有任何解决方案。
我使用的是 Android 版本 10,因为使用的设备需要它(Samsung P-1000 平板电脑,Android 2.3.3 是最新的官方版本)
任何帮助将非常感激。它可能是火车撞车或需要调用的非常简单的东西。但我希望这样做,就像地图一样。
编辑:我遇到了一个最小化通话中屏幕的解决方案(不是最好的解决方案,但它有效)
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;
}
}
}
}