1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
super.onStart(intent, startId);
this.startId = startId;
// Only load extras if intent exists (wasn't recycled)
if (intent != null)
{
Bundle infoBundle = intent.getExtras();
setSilentStatus(infoBundle.getBoolean("extraSilentStatus"));
setCallText(infoBundle.getInt("extraCallText"));
setLogStatus(infoBundle.getBoolean("extraLogStatus"));
setMessageContent(infoBundle.getString("extraMessage"));
setInformStatus(infoBundle.getBoolean("extraInformStatus"));
setDelayDuration(infoBundle.getInt("extraDelay"));
setRepeatStatus(infoBundle.getBoolean("extraRepeatStatus"));
setFilterStatus(infoBundle.getInt("extraFilterStatus"));
}
// Initializations
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Auto-Away");
sentPI = PendingIntent.getBroadcast(this, 0, new Intent("android.provider.Telephony.SMS_SENT"), 0);
aManager = (AudioManager)getBaseContext().getSystemService(Context.AUDIO_SERVICE);
if(getSilentStatus())
aManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
setPhoneCall(false);
setFile(getFilterStatus());
setNotifyCount(0);
createNotification();
if (getFilterStatus() != 0)
grabNumbers(getFile());
if(getLogStatus())
loadLog(logFile);
// Create SMS Broadcast Receiver if Texting is Enabled
if(getCallText() != CALL_ONLY)
{
smsReceiver = new BroadcastReceiver()
{
@SuppressLint({ "NewApi", "NewApi" })
@Override
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if(null != bundle)
{
setReturnAddress(null);
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
setReturnAddress(msgs[i].getOriginatingAddress());
}
Log.i(TAG, "Text Message has been received from: " + hyphenate(getReturnAddress()));
initTextSend();
}
}
};
registerReceiver(smsReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
}
resend = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
// Resending here WILL DRAIN battery if error is persistent (NO DATA in a Gym Locker etc)
switch (getResultCode())
{
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.e(TAG, "Text did NOT send (GENERIC_FAILURE)");
Log.i(TAG, "Attempting to resend");
sendSms();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.e(TAG, "Text did NOT send (NO_SERVICE)");
if(noServiceResendAttempts > 5)
{
Log.i(TAG, "Attempting resend: " + (noServiceResendAttempts++));
sendSms();
}
else
{
createNotificationFromString(getResources().getString(R.string.error_no_service));
noServiceResendAttempts = 0;
}
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.e(TAG, "Text did NOT send (RADIO_OFF)");
createNotificationFromString(getResources().getString(R.string.error_radio_off));
break;
}
}
};
registerReceiver(resend, new IntentFilter("android.provider.Telephony.SMS_SENT"));
// Create PhoneStateListener (If Calls are Selected)
if(getCallText() != TEXT_ONLY)
smsCallReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
{
TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener listener = new PhoneStateListener()
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
switch(state)
{
case TelephonyManager.CALL_STATE_IDLE:
Log.d(TAG, "Phone: Idle");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "Phone: Ringing.");
setReturnAddress(incomingNumber);
setPhoneCall(true);
Handler handler = new Handler();
Runnable runnable = new Runnable()
{
public void run()
{
initTextSend();
}
};
handler.removeCallbacks(runnable);
Log.i(TAG, "Incoming call from: " + getReturnAddress());
handler.postDelayed(runnable, (long)1000);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(TAG, "Phone: Off Hook");
break;
}
}
};
tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
String savedNumber;
savedNumber = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");
setReturnAddress(savedNumber);
}
};
registerReceiver(smsCallReceiver, new IntentFilter("android.intent.action.NEW_OUTGOING_CALL"));
} |
Partager