에어버스 2015. 1. 24. 18:45

문자수신될때 처리기 등록방법은 프로그램에서 직접 등록하는 방법과 Manifest 에 등록하는 방법 2가지다.

"android.provider.Telephony.SMS_RECEIVED"
1. 문자 수신 이벤트 처리기 Manifest에 등록
SMSSendTest-xml구현.zip

참고사이트 :
http://arabiannight.tistory.com/112
http://muhan56.tistory.com/231

 

안드로이드는 4가지 컴포넌트를 가진다.
1. Activity
2. Service
3. Content Providor
4. BroadCastReceiver

BroadCastReceiver 는 MFC 이벤트 처리기와 유사
단말기 배터리부족, 전화, 문자, 스크린 화면 꺼짐 등 이벤트가 발생하면 알려주는 기능을한다.
물론, 사용자 정의 이벤트도 처리 가능하다.

1. manifest 에 이벤트 처리기와 메시지를 등록한다 (굵은 글씨 참조)
2. Activity 구현된 코드에서
sendBroadCast(new Intent("패키지명.이벤트명"); // 문자와 같이 이미 정의된것들은 sendBroadCast() 불필요
3. 2번 프로젝트에 BroadCastReceiver 를 상속받은 클래스를 만들어 OnReceive() 에서 처리하면 된다. (반드시 2번과 같은 패키지에 있어야 한다. 패키지가 다르면???)
예) OnReceive(Context context, Intent intent) {
  String name = intent.getAction();
  if(name.equals("패키지명.이벤트이름")) {
    Toast.makeText(Context, "이벤트 받음", Toast.LENGTH_SHORT).show());
}


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="kr.co.infinity.SMSSendTest"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SMSSendTest"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- SMS_리시버 --> 
<receiver android:name=".SMSReciver"> <!-- 문자받으면 처리할 클래스명 -->
    <intent-filter > <!-- 문자받으 -->
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>
    </application>
    <uses-sdk android:minSdkVersion="9" />

<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>

package kr.co.infinity.SMSSendTest;

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

import android.telephony.SmsManager;

import android.content.BroadcastReceiver;
import android.content.Context;

import android.telephony.SmsMessage;

public class SMSSendTest extends Activity {
private EditText receiver, message;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
receiver = (EditText) findViewById(R.id.receiver);
message = (EditText) findViewById(R.id.message);
}

public void onClick(View v) {
SmsManager sm = SmsManager.getDefault();
String strNo = receiver.getText().toString();
String strMsg = message.getText().toString();
sm.sendTextMessage(
strNo, //"01012345678",
    null,
    strMsg, //"안녕하세요.",
    null,
    null);
}
}