Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Алло! Алло! - Используем телефонию

4-й курс/закрытая зона

Метки: ACTION_DIAL, TelephonyManager, PhoneStateListener

Телефонные звонки
TelephonyManager - доступ к свойствам телефона и сети
PhoneStateListener - отслеживаем изменения в состоянии подключения к сети, статусе телефона, уровня сигнала и телефонной активности
Класс PhoneNumberUtils
Перехват исходящих звонков
Перехват пропущенных звонков

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

Из соображений безопасности Android не позволяет создавать собственные активности, которые отображаются при входящих или исходящих звонках.

Требование к устройству


<!--  общая телефония -->
<uses-feature android:name="android.hardware.telephony"/>

<!--  CDMA-телефония -->
<uses-feature android:name="android.hardware.telephony.cdma"/>

<!--  GSM-телефония -->
<uses-feature android:name="android.hardware.telephony.gsm"/>

Не всякое Android-устройство является телефоном. Если ваша программа использует телефонию, то указанные выше примеры помогут отсечь устройства при установке из Google Play.

Аналогично, если ваше приложение может использовать телефонию в каких-то ситуациях, то нужно устроить проверку на поддержку телефонии устройством.


PackageManager packageManager = getPackageManager();

boolean telephonySupported = packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
boolean gsmSupported = packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_GSM);
boolean cdmaSupported = packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CDMA);

Телефонные звонки

Чтобы просто вызвать стандартную звонилку, нужно вызвать намерение с параметром ACTION_DIAL


Intent intent = new Intent(Intent.ACTION_DIAL);
activity.startActivity(intent);

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


Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:1234567"));
startActivity(intent);

Используя намерение для того, чтобы объявить необходимость набрать номер, ваше приложение может оставаться независимым от реализации программы, которая занимается непосредственно дозвоном. Например, если вы на своем устройстве заменили стандартное приложение на гибридное, совместимое с IP-телефонией, вышеописанный подход позволит другим приложениям получить доступ к новым возможностям.

Открыть звонилку и набрать заданный номер. Требуются разрешения android.permission.CALL_PHONE и CALL_PRIVILEGED (для экстренных вызовов)


Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "5551222"));

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

Реклама