Большинство гаджетов с ОС Android так или иначе являются мобильными телефонами или поддерживают функцию голосовых звонков, как некоторые планшеты и фаблеты. Android предоставляет необходимое API, используя которое, позволит выполнить некоторые функции телефона.
Осуществлять звонки довольно легко. Пусть у нас в файле интерфейса объявлено текстовое поле для ввода номера и кнопка для непосредственного звонка:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/number" android:layout_width="match_parent" android:layout_height="wrap_content" android:cursorVisible="true" android:hint="Введите номер" android:editable="true" android:singleLine="true" /> <Button android:id="@+id/dial" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Позвонить" android:onClick="dial" /> </LinearLayout>
В коде activity пропишем обработчик кнопки:
package com.example.eugene.telephoneapp; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.content.Intent; import android.view.View; import android.widget.EditText; import android.net.Uri; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void dial(View v) { EditText number=(EditText)findViewById(R.id.number); String toDial="tel:"+number.getText().toString(); startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(toDial))); } }
Для инициализации звонка надо использовать объект Intent с параметром Intent.ACTION_DIAL, а также номером телефона. Однако в этом случае после ввоа номера и нажатии кнопки нас перекинет на стандартный экран ввода номера телефона, где уже будет введен номер и надо будет только нажать на кнопку звонка:
Но такое действие не всегда удобно, так как пользователю приходится еще на стандартном экране нажимать на кнопку звонка. Но мы можем испраивть данную ситуацию, используя вместо Intent.ACTION_DIAL значение Intent.ACTION_CALL:
public void dial(View v) { EditText number=(EditText)findViewById(R.id.number); String toDial="tel:"+number.getText().toString(); startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(toDial))); }
Но при этом также надо добавить разрешение в файл манифеста:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.eugene.telephoneapp" > <uses-permission android:name="android.permission.CALL_PHONE" />
Теперь звонки будут происходить сразу после нажатия кнопки.