Код: Выделить всё
Код: Выделить всё
package com.example.callredirection;
import android.content.Intent;
import android.net.Uri;
import android.telecom.CallRedirectionService;
import android.telecom.PhoneAccountHandle;
import android.util.Log;
import androidx.annotation.NonNull;
public class OutgoingCallService extends CallRedirectionService {
@Override
public void onPlaceCall(
@NonNull Uri handle,
@NonNull PhoneAccountHandle initialPhoneAccount,
boolean allowInteractiveResponse
) {
String phoneNumber = handle.getSchemeSpecificPart();
if (phoneNumber.equals("*611")) {
Intent intent = new Intent(this, OutgoingCallActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("phoneNumber", phoneNumber);
startActivity(intent);
cancelCall();
Log.d("OutgoingCallService", "The call was cancelled");
} else {
placeCallUnmodified();
}
}
}
Это действие имеет метод SendmessageToApp , который получает глубокую ссылку от выбранного параметра пользователя:
Код: Выделить всё
public void sendMessageToApp(String deeplink) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(deeplink));
mContext.startActivity(intent);
} catch (Exception e) {
Log.e("ERROR_SEND_MESSAGE", e.toString());
}
}
Весь этот поток работает в большинстве случаев. Когда приложение закрыто, и я набираю *611, вызов перехватывается, появляется revingcallactivity , и когда я выбираю опцию, оно перемещается по правильной глубокой ссылке в приложении. Если я нажимаю на собственную кнопку Android Back, она возвращается в меню исходящего калтуальности , которое является желаемым поведением. Если приложение находится в фоновом режиме, и я набираю *611, исходящее количество Callactivity открывается в свое меню. Когда я нажимаю на опцию, он правильно перемещается в связанную глубокую ссылку в приложении, но когда я нажимаю назад, он не возвращается к исходящей калтуальности . Вместо этого он возвращается в приложение Phone , из которого был сделан вызов. Различные флаги для sendmessageToApp () намерения, например:
Код: Выделить всё
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
< /code>
, а также: < /p>
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
- Я также попытался заставить обратную навигацию из MainActivity с использованием метода OnbackPressed :
Код: Выделить всё
@Override
public void onBackPressed() {
if (getIntent().getBooleanExtra("fromOutgoingCall", false)) {
Intent intent = new Intent(this, OutgoingCallActivity.class);
startActivity(intent);
} else {
super.onBackPressed();
}
}
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra("fromOutgoingCall", true);
< /code>
Этот подход имеет неожиданное поведение, а иногда и полностью закрывает приложение. < /p>
Надеюсь, кто -то сможет мне помочь. Спасибо заранее!
Подробнее здесь: https://stackoverflow.com/questions/797 ... lredirecti
Мобильная версия