package at.abraxas.amarino.plugins.sms; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.telephony.SmsMessage; import android.util.Log; import at.abraxas.amarino.Amarino; import at.abraxas.amarino.plugins.AbstractPluginService; public class BackgroundService extends AbstractPluginService { private static final String TAG = "SMS Plugin"; private static final int MAX_LENGTH = 30; private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if ( ACTION_SMS_RECEIVED.equals(intent.getAction()) ) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdu = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdu.length]; for (int i = 0; i < pdu.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdu[i]); } for (SmsMessage message : messages) { String msg = message.getMessageBody(); //String msgSender = message.getDisplayOriginatingAddress(); // not need for sender in this example // we take only the first junk of the message // since Arduino would have problems receiving too much data in one event if (msg.length() > MAX_LENGTH) msg = msg.substring(0, MAX_LENGTH); if (DEBUG) Log.d(TAG, "send: " + msg); Amarino.sendDataFromPlugin(context, pluginId, msg); } } } } }; @Override public void init() { if (!pluginEnabled){ /* here should be your specific initialization code */ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); pluginId = prefs.getInt(EditActivity.KEY_PLUGIN_ID, -1); IntentFilter filter = new IntentFilter(ACTION_SMS_RECEIVED); registerReceiver(receiver, filter); // don't forget to set plug-in enabled if everything was initialized fine pluginEnabled = true; } } @Override public void onDestroy() { if (pluginEnabled){ unregisterReceiver(receiver); } super.onDestroy(); } @Override public String getTAG() { return TAG; } }