X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyCell.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacycell%2Fservices%2FRealtimeMonitoringService.kt;h=23e7278c9bd3a20629fd4ebc005adb1ec12cd564;hp=681a3da2b41ccb1c8f0d88f30d685533a19c790b;hb=1ce83bad844081a7f1d262ce3820b6ebfcb0c1db;hpb=a1d76c6e3ed465dd14385c5a37416ee30922021f diff --git a/app/src/main/java/com/stoutner/privacycell/services/RealtimeMonitoringService.kt b/app/src/main/java/com/stoutner/privacycell/services/RealtimeMonitoringService.kt index 681a3da..23e7278 100644 --- a/app/src/main/java/com/stoutner/privacycell/services/RealtimeMonitoringService.kt +++ b/app/src/main/java/com/stoutner/privacycell/services/RealtimeMonitoringService.kt @@ -19,6 +19,7 @@ package com.stoutner.privacycell.services +import android.Manifest import android.app.Notification import android.app.NotificationChannel import android.app.NotificationChannelGroup @@ -27,12 +28,14 @@ import android.app.PendingIntent import android.app.Service import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.os.Binder import android.os.IBinder import android.telephony.PhoneStateListener import android.telephony.TelephonyDisplayInfo import android.telephony.TelephonyManager +import androidx.core.app.ActivityCompat import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager @@ -180,25 +183,31 @@ class RealtimeMonitoringService : Service() { } } - // Create a register realtime listener work request that fires every hour. For some reason, when the service launches it will initially register the listener and then unregister it. - // This periodic request will fire shortly thereafter (it fires about every hour near the beginning of the hour) and will reregister the listener, which will stick this time. - val registerRealtimeListenerWorkRequest = PeriodicWorkRequestBuilder(1, TimeUnit.HOURS).build() + // Check to see if the read phone state permission has been granted. + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { + // Create a register realtime listener work request that fires every hour. + // This periodic request will fire shortly after being created (it fires about every hour near the beginning of the hour) and will reregister the listener if it gets garbage collected. + val registerRealtimeListenerWorkRequest = PeriodicWorkRequestBuilder(1, TimeUnit.HOURS).build() - // Register the realtime listener work request. - WorkManager.getInstance(this).enqueueUniquePeriodicWork(getString(R.string.register_listener_work_request), ExistingPeriodicWorkPolicy.REPLACE, registerRealtimeListenerWorkRequest) + // Register the realtime listener work request. + WorkManager.getInstance(this).enqueueUniquePeriodicWork(getString(R.string.register_listener_work_request), ExistingPeriodicWorkPolicy.REPLACE, registerRealtimeListenerWorkRequest) + } // Return a sticky service. return START_STICKY } fun registerTelephonyManagerListener() { - // Get a handle for the telephony manager. - val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager + // Check to see if the read phone state permission has been granted. + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { + // Get a handle for the telephony manager. + val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager - // Cancel the current listener if it exists. - telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE) + // Cancel the current listener if it exists. + telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE) - // Listen for changes to the phone state. - telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED) + // Listen for changes to the phone state. + telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED) + } } } \ No newline at end of file