Разработка приложений для смартфонов на ОС Аndroid

Использование мобильной связи в приложениях для смартфона

Разбить на страницы
Показывать лекцию целиком

Задачи лабораторной работы

  • Разработать приложение, которое может звонить по телефонным номерам.
  • Проанализировать работу этого приложения на смартфоне.
  • Инструкции по выполнению лабораторной работы

    Приложение, описанное ниже, позволяет выполня ть телефонные звонки через встроенное приложение для звонков, используя при этом собственный список контактов. Конечно, то же самое можно сделать вручную или добавить эти номера в адресную книгу телефона. Однако описанный способ может пригодится в некоторых ситуациях, например, в качестве части внутреннего приложения для хранения заранее определенного списка номеров сотрудников компании. В этом случае пользователь, используя корпоративное приложение, может вызывать нужные номера со своего личного смартфона, не добавляя контакты в адресную книгу. В некоторых случаях таких номеров может быть очень много, и специальное приложение позволит использовать рабочий справочник, не смешивая служебную информацию с личной.

    Мы создадим приложение, содержащее несколько кнопок. Нажатие на кнопку вызывает конкретный телефонный номер, проассоциированный с ней. Для простоты понимания в программе не используются базы данных, все нужные сведения "защиты" в код приложения. При желании несложно доработать программу и вынести эту информацию в отдельный файл.

    Создайте проект SimpleDialer. Рекомендуемые настройки см. на рис 10.1

    (рис 10.1) Создание нового приложения

    Добавьте следующую строчку в файл strings.xml:

    <string name="main_label">My Friends</string> 

    В файле layout.xml создайте объекты TextView и шесть кнопок:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical"
          android:padding="15dip" >
    <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
             android:layout_marginBottom="25dip"
             android:text="@string/main_label"
             android:textSize="22sp" />
    <Button
             android:id="@+id/button1"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
    …//здесь добавить описания остальных кнопок
    </LinearLayout>
     

    Перейдите в файл MainActivity.java. Создайте переменную для хранения числа записей и два массива строк:

    private int entries = 6;
    private String phoneNum[];
    private String buttonLabels[];
     

    Так как кнопки будут реагировать на нажатие, добавьте в заголовок класса implements OnClickListener (нужно также добавить import android.view.View.OnClickListener;).

    В методе onCreate() пропишите:

    phoneNum = new String[entries];
    buttonLabels = new String[entries];
     

    и создайте шесть кнопок:

     Button button1 = (Button)findViewById(R.id.button1);
                 button1.setText(buttonLabels[0]);
                 button1.setOnClickListener(this);
    
                 Button button2 = (Button)findViewById(R.id.button2);
                 button2.setText(buttonLabels[1]);
                 button2.setOnClickListener(this)
    …
    

    Создайте новый метод lunchDialer():

    public void launchDialer(String number){
                 String numberToDial = "tel:"+number;
                 startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial)));
     }
     

    Данный метод отвечает за вызов встроенного телефонного приложения, которое позволяет совершать звонки. Он получает номер телефона в качестве параметра и создает специально отформатированную строку numberToDial, которая является универсальным идентификатором (Uniform Resource Identifier). Далее создается новый интент со стандартным действием ACTION_DIAL (звонок), который используется для старта активности, отвечающей за звонки.

    Заполните массивы через метод populateArrays()(не забудьте вызвать его в начале):

    public void populateArrays(){
    		  phoneNum[0] = "123-456-78-90";
    		  phoneNum[1] = "234-567-89-01";
    		  phoneNum[2] = "345-678-90-12";
    		  phoneNum[3] = "456-789-01-23";
    		  phoneNum[4] = "567-890-12-34";
    		  phoneNum[5] = "678-901-23-45"; 
                      buttonLabels[0] = "Иванов Ваня";
                      buttonLabels[1] = "Петров Петя";
                      buttonLabels[2] = "Семеныч Сеня";
                      buttonLabels[3] = "Кузнецова Катя";
                      buttonLabels[4] = "Смирнова Саша";
                      buttonLabels[5] = "Попова Полина";
             }
     

    Далее опишите метод onClick():

    @Override
             public void onClick(View v) {
                      switch (v.getId()) {   
                      case R.id.button1:
                               launchDialer(phoneNum[0]);
                               break;
                      case R.id.button2:
                               launchDialer(phoneNum[1]);
                               break;
                      case R.id.button3:
                               launchDialer(phoneNum[2]);
                               break;
                      case R.id.button4:
                               launchDialer(phoneNum[3]);
                               break;
                      case R.id.button5:
                               launchDialer(phoneNum[4]);
                               break;
                        case R.id.button6:
                               launchDialer(phoneNum[5]);
                               break;
                      }
     

    Приложение можно запускать.

    (рис 10.2) Приложение, запущенное на устройстве (рис 10.3) С помощью приложения можно совершать звонки

    Задачи для самостоятельной работы

    Подумайте, как можно переработать приложение, чтобы можно было хранить произвольное (не заданное заранее) количество контактов, добавлять и удалять контакты и сопутствующую информацию. Попробуйте реализовать появившиеся идеи. В качестве хранилища данных можно использовать базу данных SQLite. Работа с SQLite описана в первой части курса.

    Листинги файлов проекта

    <?xml version="1.0" encoding="utf-8"?>
       <resources>
          <string name="app_name">SimpleDialer</string>
          <string name="action_settings">Settings</string>
          <string name="hello_world">Hello world!</string> 
          <string name="hello">SimpleDialer</string>
          <string name="main_label">My Friends</string>
       </resources>
     
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical"
          android:padding="15dip" >
       
          <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
             android:layout_marginBottom="25dip"
             android:text="@string/main_label"
             android:textSize="22sp" />
       
          <Button
             android:id="@+id/button1"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button2"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button3"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button4"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button5"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button6"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
       </LinearLayout>
       
    package mypackage.simpledialer;
       
       import android.os.Bundle;
       import android.app.Activity;
       import android.view.Menu;
       import android.content.Intent;
       import android.net.Uri;
       import android.view.View;
       import android.view.View.OnClickListener;
       import android.widget.Button;
       
       public class MainActivity extends Activity implements OnClickListener {
       
             private int entries = 6;
             private String phoneNum[];
             private String buttonLabels[];
       
             @Override
             protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.activity_main);
       
                      phoneNum = new String[entries];
                      buttonLabels = new String[entries];
       
                      populateArrays();
       
       
                      Button button1 = (Button)findViewById(R.id.button1);
                      button1.setText(buttonLabels[0]);
                      button1.setOnClickListener(this);
       
                      Button button2 = (Button)findViewById(R.id.button2);
                      button2.setText(buttonLabels[1]);
                      button2.setOnClickListener(this);
       
                      Button button3 = (Button)findViewById(R.id.button3);
                      button3.setText(buttonLabels[2]);
                      button3.setOnClickListener(this);
       
                      Button button4 = (Button)findViewById(R.id.button4);
                      button4.setText(buttonLabels[3]);
                      button4.setOnClickListener(this);
       
                      Button button5 = (Button)findViewById(R.id.button5);
                      button5.setText(buttonLabels[4]);
                      button5.setOnClickListener(this);
       
                      Button button6 = (Button)findViewById(R.id.button6);
                      button6.setText(buttonLabels[5]);
                      button6.setOnClickListener(this);
             }
       
             @Override
             public boolean onCreateOptionsMenu(Menu menu) {
                      getMenuInflater().inflate(R.menu.main, menu);
                      return true;
             }
         
             public void launchDialer(String number){
                      String numberToDial = "tel:"+number;
                      startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial)));
             }
    		phoneNum[0] = "123-456-78-90";
    		  phoneNum[1] = "234-567-89-01";
    		  phoneNum[2] = "345-678-90-12";
    		  phoneNum[3] = "456-789-01-23";
    		  phoneNum[4] = "567-890-12-34";
    		  phoneNum[5] = "678-901-23-45"; 
                      buttonLabels[0] = "Иванов Ваня";
                      buttonLabels[1] = "Петров Петя";
                      buttonLabels[2] = "Семеныч Сеня";
                      buttonLabels[3] = "Кузнецова Катя";
                      buttonLabels[4] = "Смирнова Саша";
                      buttonLabels[5] = "Попова Полина";         }
       
             
             @Override
             public void onClick(View v) {
                      switch (v.getId()) {
       
                      case R.id.button1:
                               launchDialer(phoneNum[0]);
                               break;
       
                      case R.id.button2:
                               launchDialer(phoneNum[1]);
                               break;
       
                      case R.id.button3:
                               launchDialer(phoneNum[2]);
                               break;
       
                      case R.id.button4:
                               launchDialer(phoneNum[3]);
                               break;
       
                      case R.id.button5:
                               launchDialer(phoneNum[4]);
                               break;
       
                      case R.id.button6:
                               launchDialer(phoneNum[5]);
                               break;
                      }
             } 
       }
     
    Страницы:

    Задачи лабораторной работы

  • Разработать приложение, которое может звонить по телефонным номерам.
  • Проанализировать работу этого приложения на смартфоне.
  • Инструкции по выполнению лабораторной работы

    Приложение, описанное ниже, позволяет выполня ть телефонные звонки через встроенное приложение для звонков, используя при этом собственный список контактов. Конечно, то же самое можно сделать вручную или добавить эти номера в адресную книгу телефона. Однако описанный способ может пригодится в некоторых ситуациях, например, в качестве части внутреннего приложения для хранения заранее определенного списка номеров сотрудников компании. В этом случае пользователь, используя корпоративное приложение, может вызывать нужные номера со своего личного смартфона, не добавляя контакты в адресную книгу. В некоторых случаях таких номеров может быть очень много, и специальное приложение позволит использовать рабочий справочник, не смешивая служебную информацию с личной.

    Мы создадим приложение, содержащее несколько кнопок. Нажатие на кнопку вызывает конкретный телефонный номер, проассоциированный с ней. Для простоты понимания в программе не используются базы данных, все нужные сведения "защиты" в код приложения. При желании несложно доработать программу и вынести эту информацию в отдельный файл.

    Создайте проект SimpleDialer. Рекомендуемые настройки см. на рис 10.1

    (рис 10.1) Создание нового приложения

    Добавьте следующую строчку в файл strings.xml:

    <string name="main_label">My Friends</string> 

    В файле layout.xml создайте объекты TextView и шесть кнопок:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical"
          android:padding="15dip" >
    <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
             android:layout_marginBottom="25dip"
             android:text="@string/main_label"
             android:textSize="22sp" />
    <Button
             android:id="@+id/button1"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
    …//здесь добавить описания остальных кнопок
    </LinearLayout>
     

    Перейдите в файл MainActivity.java. Создайте переменную для хранения числа записей и два массива строк:

    private int entries = 6;
    private String phoneNum[];
    private String buttonLabels[];
     

    Так как кнопки будут реагировать на нажатие, добавьте в заголовок класса implements OnClickListener (нужно также добавить import android.view.View.OnClickListener;).

    В методе onCreate() пропишите:

    phoneNum = new String[entries];
    buttonLabels = new String[entries];
     

    и создайте шесть кнопок:

     Button button1 = (Button)findViewById(R.id.button1);
                 button1.setText(buttonLabels[0]);
                 button1.setOnClickListener(this);
    
                 Button button2 = (Button)findViewById(R.id.button2);
                 button2.setText(buttonLabels[1]);
                 button2.setOnClickListener(this)
    …
    

    Создайте новый метод lunchDialer():

    public void launchDialer(String number){
                 String numberToDial = "tel:"+number;
                 startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial)));
     }
     

    Данный метод отвечает за вызов встроенного телефонного приложения, которое позволяет совершать звонки. Он получает номер телефона в качестве параметра и создает специально отформатированную строку numberToDial, которая является универсальным идентификатором (Uniform Resource Identifier). Далее создается новый интент со стандартным действием ACTION_DIAL (звонок), который используется для старта активности, отвечающей за звонки.

    Заполните массивы через метод populateArrays()(не забудьте вызвать его в начале):

    public void populateArrays(){
    		  phoneNum[0] = "123-456-78-90";
    		  phoneNum[1] = "234-567-89-01";
    		  phoneNum[2] = "345-678-90-12";
    		  phoneNum[3] = "456-789-01-23";
    		  phoneNum[4] = "567-890-12-34";
    		  phoneNum[5] = "678-901-23-45"; 
                      buttonLabels[0] = "Иванов Ваня";
                      buttonLabels[1] = "Петров Петя";
                      buttonLabels[2] = "Семеныч Сеня";
                      buttonLabels[3] = "Кузнецова Катя";
                      buttonLabels[4] = "Смирнова Саша";
                      buttonLabels[5] = "Попова Полина";
             }
     

    Далее опишите метод onClick():

    @Override
             public void onClick(View v) {
                      switch (v.getId()) {   
                      case R.id.button1:
                               launchDialer(phoneNum[0]);
                               break;
                      case R.id.button2:
                               launchDialer(phoneNum[1]);
                               break;
                      case R.id.button3:
                               launchDialer(phoneNum[2]);
                               break;
                      case R.id.button4:
                               launchDialer(phoneNum[3]);
                               break;
                      case R.id.button5:
                               launchDialer(phoneNum[4]);
                               break;
                        case R.id.button6:
                               launchDialer(phoneNum[5]);
                               break;
                      }
     

    Приложение можно запускать.

    (рис 10.2) Приложение, запущенное на устройстве (рис 10.3) С помощью приложения можно совершать звонки

    Задачи для самостоятельной работы

    Подумайте, как можно переработать приложение, чтобы можно было хранить произвольное (не заданное заранее) количество контактов, добавлять и удалять контакты и сопутствующую информацию. Попробуйте реализовать появившиеся идеи. В качестве хранилища данных можно использовать базу данных SQLite. Работа с SQLite описана в первой части курса.

    Листинги файлов проекта

    <?xml version="1.0" encoding="utf-8"?>
       <resources>
          <string name="app_name">SimpleDialer</string>
          <string name="action_settings">Settings</string>
          <string name="hello_world">Hello world!</string> 
          <string name="hello">SimpleDialer</string>
          <string name="main_label">My Friends</string>
       </resources>
     
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical"
          android:padding="15dip" >
       
          <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
             android:layout_marginBottom="25dip"
             android:text="@string/main_label"
             android:textSize="22sp" />
       
          <Button
             android:id="@+id/button1"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button2"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button3"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button4"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button5"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
          <Button
             android:id="@+id/button6"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp" />
       
       </LinearLayout>
       
    package mypackage.simpledialer;
       
       import android.os.Bundle;
       import android.app.Activity;
       import android.view.Menu;
       import android.content.Intent;
       import android.net.Uri;
       import android.view.View;
       import android.view.View.OnClickListener;
       import android.widget.Button;
       
       public class MainActivity extends Activity implements OnClickListener {
       
             private int entries = 6;
             private String phoneNum[];
             private String buttonLabels[];
       
             @Override
             protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.activity_main);
       
                      phoneNum = new String[entries];
                      buttonLabels = new String[entries];
       
                      populateArrays();
       
       
                      Button button1 = (Button)findViewById(R.id.button1);
                      button1.setText(buttonLabels[0]);
                      button1.setOnClickListener(this);
       
                      Button button2 = (Button)findViewById(R.id.button2);
                      button2.setText(buttonLabels[1]);
                      button2.setOnClickListener(this);
       
                      Button button3 = (Button)findViewById(R.id.button3);
                      button3.setText(buttonLabels[2]);
                      button3.setOnClickListener(this);
       
                      Button button4 = (Button)findViewById(R.id.button4);
                      button4.setText(buttonLabels[3]);
                      button4.setOnClickListener(this);
       
                      Button button5 = (Button)findViewById(R.id.button5);
                      button5.setText(buttonLabels[4]);
                      button5.setOnClickListener(this);
       
                      Button button6 = (Button)findViewById(R.id.button6);
                      button6.setText(buttonLabels[5]);
                      button6.setOnClickListener(this);
             }
       
             @Override
             public boolean onCreateOptionsMenu(Menu menu) {
                      getMenuInflater().inflate(R.menu.main, menu);
                      return true;
             }
         
             public void launchDialer(String number){
                      String numberToDial = "tel:"+number;
                      startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial)));
             }
    		phoneNum[0] = "123-456-78-90";
    		  phoneNum[1] = "234-567-89-01";
    		  phoneNum[2] = "345-678-90-12";
    		  phoneNum[3] = "456-789-01-23";
    		  phoneNum[4] = "567-890-12-34";
    		  phoneNum[5] = "678-901-23-45"; 
                      buttonLabels[0] = "Иванов Ваня";
                      buttonLabels[1] = "Петров Петя";
                      buttonLabels[2] = "Семеныч Сеня";
                      buttonLabels[3] = "Кузнецова Катя";
                      buttonLabels[4] = "Смирнова Саша";
                      buttonLabels[5] = "Попова Полина";         }
       
             
             @Override
             public void onClick(View v) {
                      switch (v.getId()) {
       
                      case R.id.button1:
                               launchDialer(phoneNum[0]);
                               break;
       
                      case R.id.button2:
                               launchDialer(phoneNum[1]);
                               break;
       
                      case R.id.button3:
                               launchDialer(phoneNum[2]);
                               break;
       
                      case R.id.button4:
                               launchDialer(phoneNum[3]);
                               break;
       
                      case R.id.button5:
                               launchDialer(phoneNum[4]);
                               break;
       
                      case R.id.button6:
                               launchDialer(phoneNum[5]);
                               break;
                      }
             } 
       }
     
    Вернуться к учебному плану