본문 바로가기

프로그래밍/안드로이드

[안드로이드/Android] 안드로이드 전화 수신 이벤트 체크하기

안드로이드 전화 수신 이벤트 체크하기


간단한 동영상, mp3파일을 이용하여 어플리케이션을 만든적이 있습니다.


한달간 피드백을 받아본 결과 유저들의 추가 요구 사항은 주로 비슷한 요청이 많았습니다.


사용자 요청 사항

  •  화면이 꺼지더라도 계속 소리가 나왔으면 좋겠어요.
  • 무한 반복 설정이 있었으면 좋겠어요.


이 두가지를 해결하여 다시 마켓에 올린 결과 검증이 있는 마켓은 리젝이 되었습니다.

이유인 즉슨, "음악이 재생중인데 전화가 오면 전화소리와 음악소리가 겹친다." 였습니다.


그래서 찾아 보았습니다. 전화가 왔을때를 확인 할 수 있느냐?


생각보다 간단하더군요. 


전화 수신을 체크하기 위해서는 아래와 같은 녀석들이 필요 합니다.(권한 까먹지 맙시다.)

  • TelephonyManager
  • PhoneStateListener
  • 매너페스트에 (PHONE_STATE_STATE) 권한설정하기


그럼 코드는 아래와 같이 작성 하시면 됩니다.


< PhoneListenerTestActivity.java > 

package com.tistory.jwandroid.phonelistener;

 

import android.app.Activity;

import android.os.Bundle;

import android.telephony.PhoneStateListener;

import android.telephony.TelephonyManager;

import android.widget.Toast;

 

public class PhoneListenerTestActivity extends Activity {

PhoneStateCheckListener phoneCheckListener;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        phoneCheckListener = new PhoneStateCheckListener(this);

        

        TelephonyManager telephonyManager  =

(TelephonyManager)getSystemService(TELEPHONY_SERVICE); 

        telephonyManager.listen(phoneCheckListener,

PhoneStateListener.LISTEN_CALL_STATE); 

    }

 

    public class PhoneStateCheckListener extends PhoneStateListener {

    PhoneListenerTestActivity mainActivity;

    PhoneStateCheckListener(PhoneListenerTestActivity _main){

    mainActivity = _main;

    }


@Override

public void onCallStateChanged(int state, String incomingNumber) {

if (state == TelephonyManager.CALL_STATE_IDLE) {

Toast.makeText(mainActivity,"STATE_IDLE : Incoming number " 

+ incomingNumber,Toast.LENGTH_SHORT).show();

} else if (state == TelephonyManager.CALL_STATE_RINGING) {

Toast.makeText(mainActivity,"STATE_RINGING : Incoming number "

 + incomingNumber,Toast.LENGTH_SHORT).show();

//수신 부분 입니다.

} else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {

Toast.makeText(mainActivity,"STATE_OFFHOOK : Incoming number " 

+ incomingNumber,Toast.LENGTH_SHORT).show();

}

}

    }     

}


< AndroidManifest.xml >

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.tistory.jwandroid.phonelistener"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk android:minSdkVersion="10" />

    <uses-permission 

android:name="android.permission.READ_PHONE_STATE"/>


    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name" >

        <activity

            android:name=".PhoneListenerTestActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>


</manifest>


요러게 하시면 됩니다. 궁금하신 사항은 댓글 달아 주세요.