Приложение для набора номера Android

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

Вот что я хочу

  • Создать пользовательский интерфейс номеронабирателя
  • Мое приложение вызывается всякий раз, когда нажимается аппаратная кнопка вызова или та, что в Android
  • Приложение также можно вызвать с экрана контактов

Я имею в виду публичную статическую финальную строку ACTION_DIAL.

4 ответа

Решение
  1. Создайте простое приложение для Android (наша звонилка). Чтобы действительно вызвать кого-то, вам просто нужен этот метод:

    private void performDial(String numberString) {
        if (!numberString.equals("")) {
           Uri number = Uri.parse("tel:" + numberString);
           Intent dial = new Intent(Intent.ACTION_CALL, number);
           startActivity(dial);
        }
    }
    
  2. Дайте вашему приложению разрешение звонить в AndroidManifest

    <uses-permission android:name="android.permission.CALL_PHONE" />
    
  3. Установите в AndroidManifest намерение, которое говорит вашему телефону, чтобы использовать ваше приложение, когда нужна звонилка

Когда кто-то нажимает кнопку вызова:

    <intent-filter>
        <action android:name="android.intent.action.CALL_BUTTON" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

Когда кто-то запускает URI:

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <action android:name="android.intent.action.DIAL" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="tel" />
    </intent-filter>

Это сработало для меня:

        <activity
        android:name=".activities.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <!-- open activity when establishing a call -->
        <intent-filter>
            <action android:name="android.intent.action.CALL_PRIVILEGED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="tel" />
        </intent-filter>

    </activity>

Обратитесь к этому ответу от arekolek.

Это правильный способ расширения InCallService сторонним приложением, которое заменит системный номеронабиратель по умолчанию и InCallScreen после того, как пользователь примет приглашение при запуске.

Он также предоставляет рабочий пример приложения в Котлине (бонусные баллы).

Пожалуйста, подтвердите его ответ там, я не заслуживаю похвалы за его работу.

Примечание: будет работать только для API 23+ и может потребоваться дополнительные разрешения в API 26

Появляется намерение ACTION_DIAL, позволяющее вам передать номер для вызова стандартной звонилке, готовый к тому, чтобы пользователь звонил по нему, если он этого хочет, так что это не то, что вам нужно.

У вас есть конкретный вопрос, или вы ищете кого-то, кто скажет вам, как реализовать приложение, вызываемое при нажатии кнопки вызова программного / аппаратного обеспечения?

Похоже, вам нужен ACTION_CALL_BUTTON - http://developer.android.com/reference/android/content/Intent.html

Другие вопросы по тегам