/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.smsautoreply; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.os.Bundle; import android.os.Environment; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.util.Log; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; /** * A sms reply activity which auto-replies the received sms message to the sender * This is used as the receiver for 1:M sms stress test. * Keep the app in the foreground when running the test. */ public class AutoReplyActivity extends Activity { private static final String TAG = "AutoReplyActivity"; private static final String LOG_FILE = "received_sms_log.txt"; private SmsMessageReceiver mSmsMsgReceiver = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSmsMsgReceiver = new SmsMessageReceiver(); registerReceiver(mSmsMsgReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED")); } private class SmsMessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); if (extras == null) return; Object[] pdus = (Object[]) extras.get("pdus"); for (int i = 0; i < pdus.length; i++) { SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]); Log.d(TAG, String.format("SMS received from %s, body: %s", message.getOriginatingAddress(), message.getMessageBody())); logMessage(message); replyMessage(context, message); } } // Log received sms message into an output file private void logMessage(SmsMessage msg) { File logFile = new File(Environment.getExternalStorageDirectory(), LOG_FILE); String logMsg = String.format("SMS: from: %s body: %s", msg.getOriginatingAddress(),msg.getMessageBody()); try { String currentDateTimeString = new SimpleDateFormat("MM-dd HH:mm:ss.SSS").format(new Date()); logMsg = String.format("%s: %s\n", currentDateTimeString, logMsg); FileOutputStream fos = new FileOutputStream(logFile, true); fos.write(logMsg.getBytes()); fos.flush(); fos.close(); } catch (IOException ioe) { Log.e(TAG, "failed to log SMS", ioe); Log.d(TAG, logMsg); } } private void replyMessage(Context context, SmsMessage msg) { SmsManager sms = SmsManager.getDefault(); String message = msg.getMessageBody(); sms.sendTextMessage(msg.getOriginatingAddress(), null, message, null, null); } } @Override protected void onPause() { super.onPause(); if (mSmsMsgReceiver != null) { unregisterReceiver(mSmsMsgReceiver); } } }