SendService.kt 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package com.pleasantprogrammer.mpp;
  2. import android.app.AlarmManager
  3. import android.app.IntentService
  4. import android.app.PendingIntent
  5. import android.content.Context
  6. import android.content.Intent
  7. import android.content.SharedPreferences
  8. import android.telephony.SmsManager
  9. import android.util.Log
  10. class SendService : IntentService("SendService") {
  11. companion object {
  12. val ACTION_SEND = "com.pleasantprogrammer.mpp.action.SEND"
  13. val ACTION_BOOT = "com.pleasantprogrammer.mpp.action.BOOT"
  14. val INTERVAL = 60 * 1000L
  15. fun makeSendIntent(ctx: Context): Intent {
  16. val intent = Intent(ACTION_SEND)
  17. intent.setClass(ctx, SendService::class.java)
  18. return intent
  19. }
  20. fun makeBootIntent(ctx: Context): Intent {
  21. val intent = Intent(ACTION_BOOT)
  22. intent.setClass(ctx, SendService::class.java)
  23. return intent
  24. }
  25. }
  26. val sharedPreferences: SharedPreferences by lazy {
  27. getSharedPreferences("store", Context.MODE_PRIVATE)
  28. }
  29. override fun onHandleIntent(intent: Intent) {
  30. if(intent.action == ACTION_SEND) {
  31. Log.i("SendService", "Sending request")
  32. val smsManager = SmsManager.getDefault()
  33. smsManager.sendTextMessage("5554", null, "GS99", null, null)
  34. sharedPreferences.edit().putLong("last_requested", System.currentTimeMillis()).commit()
  35. scheduleNext()
  36. }
  37. else if(intent.action == ACTION_BOOT) {
  38. Log.i("SendService", "Rescheduling because of restart")
  39. scheduleNext()
  40. }
  41. }
  42. fun scheduleNext() {
  43. val from = sharedPreferences.getLong("last_requested", -1)
  44. if(from < 0) return
  45. val pendingIntent = PendingIntent.getService(
  46. this, 0, makeSendIntent(this), PendingIntent.FLAG_ONE_SHOT
  47. )
  48. val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
  49. alarmManager.cancel(pendingIntent)
  50. alarmManager.set(AlarmManager.RTC_WAKEUP, from + INTERVAL, pendingIntent)
  51. }
  52. }