문자, SMS
문자수신될때 처리기 등록방법은 프로그램에서 직접 등록하는 방법과 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);
}
}