Как сделать номеронабиратель на основе новейшего приложения Google для набора номера на Android (или ПЗУ на основе Vanilla, такого как Lineage OS)?

6

Фон

Начиная с Android M, можно заменить приложение для набора номера операционной системы, что означает, что при принятии телефонных звонков может отображаться собственный настраиваемый пользовательский интерфейс.

Это делается путем расширения класса InCallService и наличия Activity, которая обрабатывает намерения набора номера:

<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" />
       <meta-data android:name="android.telecom.IN_CALL_SERVICE_RINGING"
           android:value="true" />
       <intent-filter>
           <action android:name="android.telecom.InCallService"/>
       </intent-filter>
  </service>

<activity android:name="your.package.YourDialerActivity"
            android:label="@string/yourDialerActivityLabel">
       <intent-filter>
            <action android:name="android.intent.action.DIAL" />
            <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
  </activity>

И чтобы запросить номеронабиратель по умолчанию, вы можете использовать:

private fun offerReplacingDefaultDialer() {
    if (getSystemService(TelecomManager::class.java).defaultDialerPackage != packageName) {
        startActivity( Intent(ACTION_CHANGE_DEFAULT_DIALER)
                .putExtra(EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName))

    }
}

Эта проблема

API настолько велик, что очень немногие приложения даже пробовали такое, и когда они это сделали, они сделали очень минимальную реализацию по сравнению со встроенной. Даже по сравнению с гугл звонилкой.

Пример функций, которые должны быть реализованы путем простого просмотра пользовательского интерфейса номеронабирателя во время вызовов: отключение звука, клавиатура, динамик, добавление вызова (конференция), удержание, различные состояния, видеовызовы (?),...

Что я нашел

Пытаясь найти собственное решение, я нашел пример репозитория ( здесь - "простой телефон"), из которого я сделал свой собственный форк ( здесь), только чтобы узнать, сколько вещей я должен реализовать, чтобы сделать что-то, что по крайней мере, настолько же многофункциональн, как то, что предлагает Google.

Я также искал, если другие ранее клонировали номеронабиратель, но выяснили только 2, и они являются довольно старыми версиями номеронабирателя (одна здесь, которая не имеет пользовательского интерфейса во время вызова, другая здесь, которая имеет некоторые проблемы с журналом вызовов, и имеет много устаревших и запрещенных вещей, используемых), и с некоторыми ошибками, которые я остановил, чтобы даже подумать об использовании.

Поэтому я попытался клонировать найденный мной проект самого Android здесь. К сожалению, у него очень странная структура папок, из-за которой невозможно понять, что с ней делать и как даже импортировать ее в IDE:

Изображение 174551

Изображение 174551

Изображение 174551

Но каким-то образом обнаруженные мной репозитории имели другую структуру папок, а это означает, что они знают, что это нужно как-то изменить или что с тех пор это изменилось.

Я даже пытался клонировать дозвон приложение из пользовательских дисков (поиск по Github, здесь), но есть аналогичные проблемы.

И все же каким-то образом разработчикам удалось заставить его работать. Если вы попробуете приложение "Lineage OS Phone" из ApkMirror, то, скорее всего, оно будет работать нормально, особенно если вы используете v11 вместо v19 (v19 работал для меня на Pixel 2, но не на Note 8, но v11 работал на обоих),

Также сказано, что Google Dialer теперь доступен на все большем количестве устройств ( здесь), но по некоторым причинам я не вижу его доступным для многих (проверено на Note 8).

Это напоминает мне о многих проблемах, которые у меня были, когда я пытался клонировать лаунчер и создавать свой собственный (сделал репозиторий здесь), во времена Eclipse IDE, 4 года назад. Мне просто странно, что это будет так же сложно, как и для пусковой установки...

Пока что единственное, что сработало для меня, - это использовать один из примеров репозиториев ( здесь) и сделать его рабочим ответвлением ( здесь), но, как я уже писал, у него есть различные проблемы, такие как неспособность обрабатывать вызовы. логи, и когда я пытаюсь обновить его targetSdk, он имеет некоторые проблемы с БД (например, что написано здесь). Может быть, еще больше вопросов, которые я не заметил.

Обновление: нашел еще один репозиторий, здесь ("Колер"), который в целом работает нормально. Не AOSP, но может помочь в некоторых случаях понять, как все работает.

Вопросы

  1. Как я могу клонировать последнюю версию приложения Dialer и использовать ее? Каковы шаги для достижения проекта, который можно собрать?

  2. Почему это должно быть так сложно? Будет ли предлагаемое вами решение работать с другими типами приложений внутри Android (например, с лаунчером)?

  3. В качестве альтернативы той из ОС Android Android Vanilla (имеется в виду, что нет хорошего решения для ее использования), возможно ли сделать это для пользовательского ПЗУ, которое время от времени обновляется, например, ОС Lineage?

Теги:
gradle
android-source

1 ответ

1

Как я могу клонировать последнюю версию приложения Dialer и использовать ее?

Ты не можешь Проекты, основанные на AOSP Dialer, в значительной степени зависят от системы сборки AOSP, внутренних библиотек и API, которые просто недоступны вне полного контекста AOSP.

Каковы шаги для достижения проекта, который можно собрать?

Вы не сможете продвинуться далеко вперед в его создании в Android Studio, если только вы не потратите много времени на переработку или удаление вещей, которые не позволяют перенести его в систему сборки Gradle.

Почему это должно быть так сложно?

По умолчанию он просто не предназначен для использования вне AOSP. Инженеры Google не заботятся, у них есть полная проверка AOSP. Разработчики пользовательских ПЗУ, как правило, тоже не заботятся, большинство из них также имеют полную проверку своего измененного источника.

Будет ли предлагаемое вами решение работать с другими типами приложений внутри Android (например, с лаунчером)?

Единственное решение для его сборки с помощью Android Studio - это использование Gradle (а затем импорт, как вы уже нашли). Некоторые приложения включают build.gradle, будет ли он работать, вы должны увидеть. Модуль запуска (packages/apps/Launcher3 в AOSP, packages/apps/Trebuchet в CM/LineageOS) поставляет build.gradle, созданный Google (по какой-либо причине), предназначенный для внешнего запуска Launcher. Опять же, вам придется посмотреть, работает ли это.

В качестве альтернативы операционной системе Vanilla Android, возможно ли сделать это для настраиваемого ПЗУ, которое время от времени обновляется, например, для ОС Lineage?

Как уже говорилось ранее, большинство разработчиков Custom ROM имеют полную проверку исходного кода, поэтому они обычно не заботятся об использовании Gradle (или Android Studio). Некоторые приложения LineageOS (Jelly/Browser, Eleven/Music и некоторые другие) получили поддержку Gradle, чтобы позволить участникам тестировать изменения без полной проверки исходного кода (которая может быть 70 ГБ и более), но это происходило только в собственных приложениях LineageOS, поэтому далеко не все, что также используется AOSP.

  • 2
    Я ищу решение. Просто сказать, что это невозможно, неправда, потому что я вижу, что другие преуспевают с этим (как я написал в вопросе). Посмотрите на примеры, которые сработали. Репозиторий Github. Приложение для телефона от Lineage OS. Оба прекрасно работают на 2 очень разных устройствах (Pixel 2 и Note 8). Я хочу знать, как это сделать. Не как не сделать это. Очевидно, это будет больше, чем просто клонирование проекта. Вот почему я спрашиваю это. Если бы это было так просто, я бы преуспел и не спросил, как это сделать.
  • 0
    Большинство набранных вами номеронабирателей даже не основаны на AOSP / Google, поэтому они технически не имеют отношения к вашему вопросу. APK для приложения LineageOS для телефона, вероятно, были созданы не с помощью Gradle, а скорее из полного ПЗУ, созданного с помощью системы сборки AOSP. Единственный слегка релевантный проект, который вы связали, - это проект geniusgithub, который оборачивает все в Gradle вместо полной конвертации проекта (насколько я могу судить). Вы можете попробовать, если продвинетесь дальше, основывая свою работу на этом, вы должны получить хоть что-то, обновив каталоги src / main и зависимости.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню