Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
4-й курс/Закрытая зона
Метки: ACTION_DIAL, TelephonyManager, PhoneStateListener
Телефонные звонки
Звоним по номерам контактов
TelephonyManager - доступ к свойствам телефона и сети
PhoneStateListener - отслеживаем изменения в состоянии подключения к сети, статусе телефона, уровня сигнала и телефонной активности
Класс PhoneNumberUtils
Перехват исходящих звонков
Перехват пропущенных звонков
Работа с разными симками
Многие программисты даже стали забывать, что сотовый телефон изначально предназначен для телефонных звонков. Android имеет API для поддержки телефонии, что позволяет получить доступ к низкоуровневому аппаратному стеку телефона. Вы можете в своей программе инициировать набор номера или интегрировать обработку звонков и отслеживание состояния телефона в свои проекты.
Требование к устройству
<!-- общая телефония -->
<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);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
Также можно отобразить экран для набора номера и сразу передать ему конкретный номер, позволяя стандартному приложению самому управлять инициализацией вызова (системное телефонное приложение предлагает решать пользователю, делать вызов или нет). Этот подход не требует никаких полномочий и считается стандартным путем осуществления звонков из сторонних приложений:
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:1234567"));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
Используя намерение для того, чтобы объявить необходимость набрать номер, ваше приложение может оставаться независимым от реализации программы, которая занимается непосредственно дозвоном. Например, если вы на своём устройстве заменили стандартное приложение на гибридное, совместимое с IP-телефонией, вышеописанный подход позволит другим приложениям получить доступ к новым возможностям.
Открыть звонилку и набрать заданный номер. Требуются разрешения android.permission.CALL_PHONE и CALL_PRIVILEGED (для экстренных вызовов)
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "5551222"));
startActivity(intent);
Вы вошли на сайт, как гость.
Необходимо зарегистрироваться, чтобы прочитать статью