프로그래밍/안드로이드

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

초보플밍지기 2012. 5. 4. 10:06

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


간단한 동영상, 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>


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