자신이 만든 앱에서 스마트폰의 기능인 전화 걸기를 호출하는 방법은 무엇일까요? 안드로이드 앱을 구성하는 네 가지 기본 요소는 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 에 값을 입력하면 버튼을 눌러 전화를 거는 방식이 됩니다. 왼쪽 버튼은 바로 전화를 걸기 위한 것이고, 오른쪽 버튼은 다이얼로그 화면을 거쳐서 전화를 걸 수 있도록 호출합니다.
▼ 위 화면을 구성하는 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 을 사용해서 전화 바로 걸기를 실행한 결과 입니다. 다이얼 화면을 거치지 않고 바로 전화가 걸립니다.
▼ 다음은 android.intent.action.DIAL 을 이용해서 다이얼 화면을 호출한 결과 화면입니다. 다이얼 화면에 전화 걸기를 호출할 때 입력했던 전화번호가 찍혔습니다. 두 Intent 값의 차이점을 아시겠죠?
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) Activity 에서 이미지 리소스 drawable 다루는 방법 (4) | 2024.04.28 |
---|---|
안드로이드 콘솔에서 adb shell 패키지 접근 권한 Permission denied 에러 해결 (1) | 2024.04.11 |
안드로이드(Android) scale 이용해서 애니메이션(Animation) 구현하는 방법 (2) | 2024.03.07 |
안드로이드(Android) ProgressDialog(프로그레스 다이얼로그) 구현 방법 (9) | 2024.03.06 |
안드로이드 개발 ContentProvider, ContentResolver 이용해서 연락처 가져오는 방법 (3) | 2024.02.09 |
안드로이드 스튜디오 개발 APK 파일 찾는 방법 (0) | 2023.07.10 |
안드로이드(Android) ImageView scale type 별로 이미지 배치 하는 방법 (0) | 2023.01.24 |
안드로이드 개발 에러 have you declared this activity in your AndroidManifest.xml ? (0) | 2023.01.14 |