Reputation: 1
Here is my background upload service when I am making a work request
package com.unischolarz.calllogger.utils
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.IBinder
import android.os.PowerManager
import android.util.Log
import androidx.work.Constraints
import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import java.util.UUID
class BackgroundService() : Service() {
private var wakeLock: PowerManager.WakeLock? = null
override fun onCreate() {
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakeLockTag")
wakeLock?.acquire(10 * 60 * 1000L /*10 minutes*/)
}
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
if (intent == null) {
return START_STICKY
}
if (intent.getBooleanExtra("ACTION", false)) {
// performNetworkTask()
Logger.e("networkIntent", "Inetent Received1")
}
return START_STICKY
}
override fun onDestroy() {
super.onDestroy()
wakeLock?.let {
if (it.isHeld) {
it.release()
}
}
val broadcastIntent = Intent("ACTION.RESTART.YourService")
sendBroadcast(broadcastIntent)
}
private fun performNetworkTask() {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val workRequest = OneTimeWorkRequestBuilder<LogUpdateWorker>()
.setConstraints(constraints)
.addTag(UUID.randomUUID().toString())
.build()
WorkManager.getInstance(this).enqueue(workRequest)
Log.d("WorkRequest", workRequest.toString())
Log.d("MakingWrk", "Making Work")
}
}
And here is my WorkManager
package com.unischolarz.calllogger.utils
import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import androidx.work.CoroutineWorker
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.unischolarz.calllogger.main.MainActivityViewModel
class LogUpdateWorker(private val appContext: Context, workerParams: WorkerParameters) :
CoroutineWorker(appContext, workerParams) {
private val sharedPrefs: SharedPreferences =
appContext.getSharedPreferences("UPLOAD_PREFS", Context.MODE_PRIVATE)
override suspend fun doWork(): Result {
try {
synchronized(this) {
val currentTime = System.currentTimeMillis()
val uploadStartTimestamp1 = sharedPrefs.getLong("UPLOAD_START_TIMESTAMP1", 0)
if (currentTime - uploadStartTimestamp1 > MainActivityViewModel.UPLOAD_TIMEOUT) {
sharedPrefs.edit().putBoolean("UPLOAD_IN_PROGRESS1", false).apply()
}
val isUploadInProgress1 = sharedPrefs.getBoolean("UPLOAD_IN_PROGRESS1", false)
Log.d("UPLOAD_IN_PROGRESS4", "$currentTime |||| $uploadStartTimestamp1")
Log.d("UPLOAD_IN_PROGRESS4", "$isUploadInProgress1")
if (!isUploadInProgress1) {
sharedPrefs.edit()
.putLong("UPLOAD_START_TIMESTAMP1", currentTime)
.apply()
Log.d("UPLOAD_IN_PROGRESS4", "INITIALIZING UPLOAD IN BACKGROUND AFTER CALL")
MainActivityViewModel().getAllData2(appContext)
Log.d("UPLOAD_IN_PROGRESS4", "UPLOAD COMPLETED IN BACKGROUND AFTER CALL")
} else {
Log.d("UPLOAD_IN_PROGRESS4", "UPLOAD ALREADY IN PROGRESS")
}
}
} catch (e: Exception) {
Log.e("UPLOAD_IN_PROGRESS4", "Exception: ${e.message}")
logException(e)
sharedPrefs.edit().putBoolean("UPLOAD_IN_PROGRESS1", false).apply()
return Result.failure()
}
return Result.success()
}
}
I've already taken the permission for the auto start and battery optimization, still after 2 or 3 days the WorkManger is not executing my Worker on MIUI at the same time, it works perfectly fine on Samsung devices.
I am expecting my code to work same on MIUI as it does on Samsung devices.
Upvotes: 0
Views: 23