안드로이드 개발 Intent 이용한 전화 걸기

안드로이드 개발

안드로이드 개발 Intent 이용한 전화 걸기

 

환경: Android Studio

 

자신이 만든 앱에서 스마트폰의 기능인 전화 걸기를 호출하는 방법은 무엇일까요? 안드로이드 앱을 구성하는 네 가지 기본 요소는 Activity, Service, Broadcast Receiver, Content Provider 입니다. 4가지 구성요소 간에 작업을 수행하기 위한 정보 전달 역할은 인텐트(Intent) 가 합니다. 안드로이드 내에 기본 앱인 전화, 카메라, 연락처, 문자 등도 인텐트(Intent)을 이용해서 호출합니다. 오늘은 간단하게 전화 거는 방법에 대해서만 알아 보겠습니다.

 

먼저 전화를 걸기 위해서는 AndroidManifest.xml permission 세팅을 해야 합니다. permission 이 두 종류인 것은 바로 전화를 거는 기능과 다이얼로 번호를 표시해 주는 화면을 이용하기 위해서 입니다

<!--전화와 메시지를 보내기 위한 퍼미션-->
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.DIAL_PHONE" />

Intent 를 이용해서 전화를 걸기 위한 소스는 다음과 같습니다. startActivity() 함수를 이용해서 호출을 하게 되는데 첫 번째 인수 값으로 Intent 객체를 넘겨야 합니다. 위에서 설명했듯이 Intent 는 안드로이드 앱들 간에 정보를 전달하고 호출하는 역할을 합니다. Intent 의 첫 번째 인수 값에 따라 어떤 앱을 호출할지 결정이 됩니다.

 

l  전화걸기 : android.intent.action.CALL

l  전화 다이얼 : android.intent.action.DIAL

l  전화 걸기 이전 : android.intent.action.NEW_OUTGOING_CALL

l  긴급 통화 : android.intent.action.CALL_PRIVILEGED

l  폰 상태읽기 : android.intent.action.READ_PHONE_STATE

l  폰 상태수정 : android.intent.action.MODIFY_PHONE_STATE

 

Intent 의 두 번째 인수는 전화 번호가 들어갑니다. 숫자만 들어가는 것이 아니라 “tel:“ 과 조합한 후 Uri.parse() 함수를 이용해서 변환합니다.  

String tel = “tel:01055551211”;
startActivity(new Intent("android.intent.action.CALL", Uri.parse(tel)));
startActivity(new Intent("android.intent.action.DIAL", Uri.parse(tel)));

다음은 Activity 를 구성해 보겠습니다. 화면은 다음과 같습니다. EditText 하나에 Button 위젯 두 개가 있습니다. EditText 에 값을 입력하면 버튼을 눌러 전화를 거는 방식이 됩니다. 왼쪽 버튼은 바로 전화를 걸기 위한 것이고, 오른쪽 버튼은 다이얼로그 화면을 거쳐서 전화를 걸 수 있도록 호출합니다.

안드로이드 개발 Intent 이용한 전화 걸기

 

위 화면을 구성하는 Activity 본문 소스 입니다. 특별한 내용은 없고 버튼 클릭 이벤트에 startActivity() 함수를 실행한 것뿐입니다

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class CallActivity extends Activity implements View.OnClickListener {

    private Button mCall;
    private Button mDialogCall;
    private EditText mEditNumber;
    private String mNum;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_call);

        mCall = (Button) findViewById(R.id.btnCall);
        mDialogCall = (Button) findViewById(R.id.btnDialog);
        mEditNumber = (EditText) findViewById(R.id.edtNumber);

        mCall.setOnClickListener(this);
        mDialogCall.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        mNum = mEditNumber.getText().toString();
        String tel = "tel:" + mNum;
        switch (v.getId()){
            case R.id.btnCall:
                startActivity(new Intent("android.intent.action.CALL", Uri.parse(tel)));
                break;
            case R.id.btnDialog:
                startActivity(new Intent("android.intent.action.DIAL", Uri.parse(tel)));
                break;
        }
    }
}

Activity 를 구성하는 메인 레이아웃은 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?>
<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:orientation="vertical"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.gon.rstpclient.CallActivity">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edtNumber"
            android:layout_gravity="center_horizontal" />

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="전화바로걸기"
                android:id="@+id/btnCall"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="전화걸기 다이얼로그"
                android:id="@+id/btnDialog" />
        </LinearLayout>

    </LinearLayout>
</LinearLayout>

Intent 의 첫 번째 인수 값으로 android.intent.action.CALL 을 사용해서 전화 바로 걸기를 실행한 결과 입니다. 다이얼 화면을 거치지 않고 바로 전화가 걸립니다

안드로이드 개발 Intent 이용한 전화 걸기

 

다음은 android.intent.action.DIAL 을 이용해서 다이얼 화면을 호출한 결과 화면입니다. 다이얼 화면에 전화 걸기를 호출할 때 입력했던 전화번호가 찍혔습니다. Intent 값의 차이점을 아시겠죠

안드로이드 개발 Intent 이용한 전화 걸기

저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군