Skip to content

Instantly share code, notes, and snippets.

@auyanik
Last active February 4, 2021 12:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save auyanik/847a0ee0fc6088600ac13160a1952762 to your computer and use it in GitHub Desktop.
Save auyanik/847a0ee0fc6088600ac13160a1952762 to your computer and use it in GitHub Desktop.
Add job scheduler with dagger2
// Buraya serviebuilderModul ekledik
@Singleton //Bunu unutma
@Component(modules = [AndroidSupportInjectionModule::class, AppModule::class, ViewBuilderModule::class, ServiceBuilderModule::class])
interface AppComponent : AndroidInjector<AppControl> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<AppControl>()
}
//scheduler için jobInfo gereklidir scheduler özellikleri burada belirlenir
//JobInfo provider oluyor JobScheduler provide olarak çağırdığımızda JobInfo da provider olarak oluşturduk
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
@Provides
fun provideJobInfo(app: AppControl): JobInfo = JobInfo.Builder(123, ComponentName(app, JobSchedule::class.java))
.setRequiresCharging(false)
.setMinimumLatency(1)
.setPersisted(true)
.build()
//JobScheduler provide fonksiyonu
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
@Provides
@Singleton
fun provideJobScheduler(app: AppControl): JobScheduler = app.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
//Artık bunun içinde inject işlemleri yapılabilir.
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
class JobSchedule : JobService() {
private var TAG = JobSchedule::class.java.simpleName
override fun onCreate() {
super.onCreate()
AndroidInjection.inject(this)
}
override fun onStopJob(params: JobParameters?): Boolean {
Log.d(TAG, "Job paused.")
return true
}
override fun onStartJob(params: JobParameters?): Boolean {
return true
}
}
//Çağırmayı unutmuyoruz :)
@Inject
lateinit var jobInfo: JobInfo
@Inject
lateinit var jobScheduler: JobScheduler
override onCreate(..){
.
.
.
jobScheduler.schedule(jobInfo)
}
//Tabi ki maniest unutmamak lazım
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<service
android:name=".base.workmanager.JobSchedule"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="false"/>
// Servicebuilder oluşturduk cünkü baska service ihtiyacı olabilir.
@Module
public abstract class ServiceBuilderModule {
@ContributesAndroidInjector
abstract JobSchedule contributeJobSchedule();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment