Как сделать работу на другом экземпляре из AppCompatActivity - PullRequest
0 голосов
/ 16 ноября 2018

Как я могу превратить эту AppCompatActivity в службу или что-то для запуска на другом экземпляре, я пытаюсь научиться программировать на Android в kotlin, но я боюсь, я смог сделать работу в AppCompatActivity, но мне нужно, чтобы это было без пользовательского интерфейса, сейчаскогда я добавляю это в свое приложение, у меня появляется 2 экрана, и это пусто.

class MainApp : AppCompatActivity() {
private val TAG = "MyService"
private val REFRESH_INTERVAL = (15 * 1000 * 60).toLong() // 15 minutes
private var jobId = 0

lateinit private var serviceComponent: ComponentName

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    serviceComponent = ComponentName(this, UploadJobService::class.java)

    val dispatcher = FirebaseJobDispatcher(GooglePlayDriver(applicationContext))
    val job = dispatcher.newJobBuilder()
            .setService(JobService::class.java)
            .setTag(TAG)
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(0, 60))
            .setTrigger(Trigger.contentUriTrigger( Arrays.asList(
                    ObservedUri(Uri.parse(Environment.getExternalStorageDirectory().absolutePath), ObservedUri.Flags.FLAG_NOTIFY_FOR_DESCENDANTS))
            ))
            .setLifetime(Lifetime.FOREVER)
            .setReplaceCurrent(false)
            .setConstraints(
                    Constraint.ON_UNMETERED_NETWORK
            )
            .build()
    dispatcher.mustSchedule(job)

    scheduleJob()
}

private fun scheduleJob() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        val jobInfo: JobInfo
        val builder = JobInfo.Builder(jobId++, serviceComponent)
        builder.setPeriodic(REFRESH_INTERVAL)
        builder.setPersisted(true)
        //builder.setMinimumLatency(1000)
        //builder.setOverrideDeadline(10000)
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)

        // Extras, work duration.
        val extras = PersistableBundle()
        extras.putLong(WORK_DURATION_KEY, 60000)

        // Finish configuring the builder
        builder.run {
            setRequiresDeviceIdle(false)
            setRequiresCharging(false)
            setExtras(extras)
        }

        // Schedule job
        Log.d(TAG, "Scheduling job")
        (getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler).schedule(builder.build())
    } else {
        if(!isServiceRunning()){
            val intent = Intent(this, BackupService::class.java)
            startService(intent)
            Log.i(TAG,"Service started!")
        } else {
            Log.i(TAG,"Service already started!")
        }
    }
}

private fun isServiceRunning(): Boolean {
    val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    for(service in manager.getRunningServices(Integer.MAX_VALUE)) {
        if (BackupService::class.java.name == service.service.className) {
            return true
        }
    }
    return false
}

}

...