본문 바로가기

Android/BroadcastReceiver, SMS

Android BroadcastReceiver for SMS

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidapp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".SMSActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".SMSReceiver"> <intent-filter android:priority="10000"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> </manifest>


Activity

package com.example.androidapp; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.*; public class SMSActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); 

Bundle bundle = getIntent().getExtras(); String sms = bundle.getString("sms"); Toast.makeText(this, sms, Toast.LENGTH_LONG).show(); } }


BroadcastReceiver

package com.example.androidapp; 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 SMSReceiver extends BroadcastReceiver { 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("SMS Receiver", "[SMSApp] onReceive: " + ab); Toast.makeText(context, ab.toString(), Toast.LENGTH_LONG).show(); //abortBroadcast(); // 다른 Receiver에게 인텐트가 전달되지 않도록 한다 /* Start the Main-Activity */ Intent i = new Intent(context, SMSActivity.class);

i.putExtra("sms", ab.toString()); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } }