Служба подключения Android, вызов запрещен ⇐ Android
-
Anonymous
Служба подключения Android, вызов запрещен
Я реализую службу подключения в мобильном приложении VoIP. После некоторого использования приложения и создания вызовов с помощью PlaceCall или addNewIncomingCall создание новых вызовов становится невозможным, но после перезапуска приложения некоторое время все снова работает. После вызова любого из упомянутых методов в logcat я имею следующее:
2023-10-19 15:13:47.363 23963-23963 TelecomFramework I: createConnectionFailed TC@270: (TSI.pC->CIP.sNOCI)->CS.crCoF->H.CS.crCoF( актерский состав)@E-Kdk 2023-10-19 15:13:47.364 23963-23963 TelecomFramework I TelecomConnectionService: createConnectionFailed TC@270: (TSI.pC->CIP.sNOCI)->CS.crCoF->H.CS.crCoF(cast)@E- КДК isIncomingCallPermit и isOutgoingCallPermited возвращают false. Согласно документации, false возвращается в случаях:
[*]У PhoneAccount не установлено свойство PhoneAccount#CAPABILITY_SELF_MANAGED (т. е. это управляемая служба ConnectionService), и достигнут лимит активных или удерживаемых вызовов. [*]Текущий вызов службы экстренной помощи.
Я создаю учетную запись телефона таким образом, как вы можете видеть, что установлен флаг CAPABILITY_SELF_MANAGED. В любом случае поначалу все работает правильно.
private static PhoneAccount createAccount(Context context) { ИмяКомпонентаИмяКомпонента = новое ИмяКомпонента(context.getPackageName(), TelecomConnectionService.class.getName()); PhoneAccountHandle accountHandle = новый PhoneAccountHandle(comComponentName, context.getPackageName()); Строковая идентичность = "sip:app@example.com"; Адрес Uri = Uri.parse(identity); Дополнения к пакету = новый Bundle(); extras.putBoolean(PhoneAccount.EXTRA_SUPPORTS_HANDOVER_TO, true); extras.putBoolean(PhoneAccount.EXTRA_LOG_SELF_MANAGED_CALLS, true); extras.putBoolean(PhoneAccount.EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE, true); PhoneAccount.Builder builder = PhoneAccount.builder(accountHandle, context.getPackageName()) .addSupportedUriScheme(PhoneAccount.SCHEME_SIP) .setAddress(адрес) .setCapabilities(PhoneAccount.CAPABILITY_SELF_MANAGED) .setExtras(дополнительные); вернуть builder.build(); } Я прерываю соединения, вызывая метод destroyConnection в onStateChanged, когда состояние равно Connection.STATE_DISCONNECTED
Реализация destroyConnection:
public void DestroyConnection() { Log.d(TAG, "destroyConnection"); TelecomConnectionService.destroyCurrentConnection(); супер.уничтожить(); } и destroyCurrentConnection — это просто:
public static void DestroyCurrentConnection() { конн = ноль; } Есть идеи, что я делаю не так?
Я реализую службу подключения в мобильном приложении VoIP. После некоторого использования приложения и создания вызовов с помощью PlaceCall или addNewIncomingCall создание новых вызовов становится невозможным, но после перезапуска приложения некоторое время все снова работает. После вызова любого из упомянутых методов в logcat я имею следующее:
2023-10-19 15:13:47.363 23963-23963 TelecomFramework I: createConnectionFailed TC@270: (TSI.pC->CIP.sNOCI)->CS.crCoF->H.CS.crCoF( актерский состав)@E-Kdk 2023-10-19 15:13:47.364 23963-23963 TelecomFramework I TelecomConnectionService: createConnectionFailed TC@270: (TSI.pC->CIP.sNOCI)->CS.crCoF->H.CS.crCoF(cast)@E- КДК isIncomingCallPermit и isOutgoingCallPermited возвращают false. Согласно документации, false возвращается в случаях:
[*]У PhoneAccount не установлено свойство PhoneAccount#CAPABILITY_SELF_MANAGED (т. е. это управляемая служба ConnectionService), и достигнут лимит активных или удерживаемых вызовов. [*]Текущий вызов службы экстренной помощи.
Я создаю учетную запись телефона таким образом, как вы можете видеть, что установлен флаг CAPABILITY_SELF_MANAGED. В любом случае поначалу все работает правильно.
private static PhoneAccount createAccount(Context context) { ИмяКомпонентаИмяКомпонента = новое ИмяКомпонента(context.getPackageName(), TelecomConnectionService.class.getName()); PhoneAccountHandle accountHandle = новый PhoneAccountHandle(comComponentName, context.getPackageName()); Строковая идентичность = "sip:app@example.com"; Адрес Uri = Uri.parse(identity); Дополнения к пакету = новый Bundle(); extras.putBoolean(PhoneAccount.EXTRA_SUPPORTS_HANDOVER_TO, true); extras.putBoolean(PhoneAccount.EXTRA_LOG_SELF_MANAGED_CALLS, true); extras.putBoolean(PhoneAccount.EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE, true); PhoneAccount.Builder builder = PhoneAccount.builder(accountHandle, context.getPackageName()) .addSupportedUriScheme(PhoneAccount.SCHEME_SIP) .setAddress(адрес) .setCapabilities(PhoneAccount.CAPABILITY_SELF_MANAGED) .setExtras(дополнительные); вернуть builder.build(); } Я прерываю соединения, вызывая метод destroyConnection в onStateChanged, когда состояние равно Connection.STATE_DISCONNECTED
Реализация destroyConnection:
public void DestroyConnection() { Log.d(TAG, "destroyConnection"); TelecomConnectionService.destroyCurrentConnection(); супер.уничтожить(); } и destroyCurrentConnection — это просто:
public static void DestroyCurrentConnection() { конн = ноль; } Есть идеи, что я делаю не так?
Мобильная версия