ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SMS에 반응하는 프로그램(안드로이드)
    과거...../개발일지 2010. 2. 17. 09:16


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

    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);


    이강좌는  http://www.anddev.org/recognize-react_on_incoming_sms-t295.html  참고하여 제작되었습니다.
    하지만 그동안 많은 부분 라이브러리의 이동 등등.(왜 하는지 모름) 에 인해서 기존 소스에 오류가 많아 수정부분이
    많았습니다.





                         

     

Designed by Tistory.