Такое ощущение, что этот вопрос задавали много раз, но ни один из них не соответствует моим потребностям, и ни одно из решений не работает для меня.
У меня есть приложение с классом, расширяющимся до 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;
}
}
}
}