안드로이드 개발 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 에 값을 입력하면 버튼을 눌러 전화를 거는 방식이 됩니다. 왼쪽 버튼은 바로 전화를 걸기 위한 것이고, 오른쪽 버튼은 다이얼로그 화면을 거쳐서 전화를 걸 수 있도록 호출합니다.
▼ 위 화면을 구성하는 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 값의 차이점을 아시겠죠?
'안드로이드 개발' 카테고리의 다른 글
안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법 (0) | 2019.09.16 |
---|---|
Wowza GoCoder 안드로이드, 아이폰 클라이언트 개발을 위한 라이선스 키 받는 방법 (1) | 2019.09.15 |
안드로이드 개발 화면 전환 할 때 Activity 삭제와 생성 방지 orientation, screenSize 속성 사용하기 (0) | 2019.09.15 |
안드로이드 버전코드(versionCode), 버전이름(versionName) 차이와 조회하는 방법 (0) | 2019.09.14 |
안드로이드 개발 FragmentActivity 사용해서 화면 구성하는 방법 (0) | 2019.09.03 |
안드로이드 개발 에뮬레이터 타임아웃(Timeout) 오류 해결하는 방법 (0) | 2019.08.26 |
안드로이드 Android 디자인 참고 아이콘 Material design icon 다운받아 사용하기 (0) | 2019.08.05 |
안드로이드(Android) 삼성 갤럭시 에뮬레이터 테스트 다운받아 이용하기 (0) | 2019.06.06 |