Итак, позвольте мне видеть, мы хотим показать адам и канун, есть какой-то запретный плод в дереве, и мы бы хотели, чтобы они не ели ...
Как насчет того, чтобы иметь ангела с огненным мечом?
В соответствии с документами и когда вы сами комментируете, вам необходимо добавить это в свой манифест :
<service android:name="your.package.YourInCallServiceImplementation"
android:permission="android.permission.BIND_INCALL_SERVICE">
<meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService"/>
</intent-filter>
</service>
android:name
должны быть заменены на класс, который реализует этот сервис.
<activity android:name="your.package.YourDialerActivity">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
android:name
должен быть заменен классом, который реализует основное действие для вашей собственной реализации номеронабирателя.
Здесь вы можете найти больше информации об этом: https://developer.android.com/guide/topics/connectivity/telecom/selfManaged
А вот пример проект, который вы можете использовать в качестве руководства: https://github.com/arekolek/simple-phone
- Возможно ли даже стороннему приложению заменить приложение по умолчанию в приложении вызова?
Да, начиная с API 23, это возможно.
- Существуют ли примеры реализации, использующие этот API, которые я могу использовать в качестве ссылки? Я нашел реализацию Google , но это системное приложение, которое использует некоторые разрешения, недоступные для других приложений (например:
android.permission.MODIFY_PHONE_STATE
).
Единственный известный мне образец - это созданный мною образец https://github.com/arekolek/simple-phone , который уже упоминался в другом ответе. а также.
- Правильно ли я предполагаю, что после предоставления правильной
InCallService
регистрации манифеста и реализации заглушки я мог ожидать найти мое приложение вDefault Apps -> Phone
? Нужно ли мне объявить что-то еще?
На самом деле, нет.
Как упомянуто в другом ответе по теме , вам вообще не нужно, чтобы InCallService
появлялось в этом списке.
Тем не менее, вам нужно зарегистрировать действие с двумя фильтрами намерений, один со схемой tel
Ури, а другой с пустой схемой (недостаточно только одного из них):
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<data android:scheme="tel" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
</intent-filter>
Это смутно упоминается в документах , а явно указано в коде AOSP .
1128 Этого достаточно, чтобы появиться в этом списке. Только тогда, чтобы предоставить пользовательский интерфейс для вызова , вам действительно понадобитсяInCallService
.