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

Фон

Начиная с 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 настолько велик, что очень немногие приложения даже пробовали такую ​​вещь, и когда они это сделали, они сделали очень минимальную реализацию по сравнению со встроенной.Даже по сравнению с гугл звонилкой.

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

Что я нашел

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

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

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

enter image description here

enter image description here

enter image description here

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

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

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

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

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

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

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

Вопросы

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

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

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

1 Ответ

2 голосов
/ 22 апреля 2019

Как я могу клонировать последнюю версию приложения 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 OS?

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

...