도래울

SMS에 반응하는 프로그램(안드로이드) 본문

개발/Android

SMS에 반응하는 프로그램(안드로이드)

도래울 2016. 2. 5. 12:59

이 프로그램은 음악을들을때나 핸드폰으로 딴 작업을 하고있을때 문자가 온것을 알려주는 프로그램입니다.

1. 먼저  AndroidManufest.xml 에 퍼미션을 추가해주어야합니다.

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


2. 이제 메인 코드를 작성해보겠습니다.
    저는 메인코드이름을 SmsR.java로 하겠습니다.
    *기본적으로 상속은 BroadcastReceiver에서 받겠습니다.

 package com.ex.SmsR;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

public class SmsR extends BroadcastReceiver {
 
    @Override
 public void onReceive(Context arg0, Intent arg1) {
  // TODO Auto-generated method stub
  
 } 
 
}

*****주의******
예전 강좌들을 찾다보면 IntentReceiver 를 상속받는 경우를 볼수있습니다. 하지만 지금은 BroadcastReceiver로 받으니
참고하시기 바랍니다.(지긍은 IntentReceiver 존재하지 않음)

*팁: 이클립스를 사용하실때 상속을 받으신후 밑에 나온그림처럼 마우스 오른쪽버튼을 클릭후 하단에 적힌 메뉴로 따라
클릭하시면 쉽게 오버라이드 코드를 작성하실수있습니다.  


(1)SmsR소스

package com.ex.SmsR;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class SmsR extends BroadcastReceiver {
 
    private static final String LOG_TAG = "SmsR";
    private static final String ACTION ="android.provider.Telephony.SMS_RECEIVED";        
 
 
 public void onReceive(Context context, Intent intent) {
  if(intent.getAction().equals(ACTION)){
   StringBuilder ab = new StringBuilder();
   Bundle bundle = intent.getExtras();   
   
   if(bundle != null){
    Object[] pdusObj = (Object[]) bundle.get("pdus"); 
          SmsMessage[] messages = new SmsMessage[pdusObj.length]; 
          for (int i = 0; i<pdusObj.length; i++) { 
                  messages[i] = SmsMessage.createFromPdu ((byte[])pdusObj[i]); 
                  ab.append("Received compressed SMS\n FROM ");
                  ab.append(messages[i].getDisplayOriginatingAddress());                  
                  ab.append("--Message--- ");
                  ab.append(messages[i].getDisplayMessageBody());
          } 
   }
   
   Log.i(LOG_TAG, "[SMSApp] onReceiveIntent: " + ab);
   Toast.makeText(context, ab.toString(), Toast.LENGTH_LONG).show();
   
            /* Start the Main-Activity */
            Intent i = new Intent(context, SMSActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
   
  }  
  
 }
}

(2)SMSActivity 소스

 package com.ex.SmsR;

import android.app.Activity;
import android.os.Bundle;

public class SMSActivity extends Activity
{
     /** Called when the activity is first created. */

     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.main);
     }

(3)AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ex.SmsR"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SMSActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".SmsR"> 
            <intent-filter> 
                <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
            </intent-filter> 
        </receiver>     
       

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

</manifest>


그닥 틀별하다는 소스 부분은 없습니다. 퍼미션 설정 부분만 주의하면 크게 염려될거는 없습니다.


 old부분 수정부분(더이상 존재하지 않는 부분) -현재 개발 2.0
1. Telephony.Sms.Intents.getMessagesFromIntent(intent);  ->

   Object[] pdusObj = (Object[]) bundle.get("pdus"); 
          SmsMessage[] messages = new SmsMessage[pdusObj.length];
 

2.
 setLaunchFlags(Intent.NEW_TASK_LAUNCH);  -> 

  setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


Comments