首页 > 解决方案 > 如何在 JobService 中调用 Activity Context 以获得权​​限?

问题描述

为了在 JobScheduler中获取位置,我需要获取 Activity Context 以调用ActivityCompat.requestPermissions.onStartJob

ActivityCompat.requestPermissions({}, permissions, REQUEST_CODE);

但我无法将活动上下文传递给 JobScheduler。

  class GetLocationJob : JobService() {

    override fun onStopJob(params: JobParameters?): Boolean {
        ...
    }

    override fun onStartJob(params: JobParameters?): Boolean {
        
      // Check Permission
      if (ActivityCompat.checkSelfPermission(
          this,
          Manifest.permission.ACCESS_FINE_LOCATION
        ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
          this,
          Manifest.permission.ACCESS_COARSE_LOCATION
        ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
          this,
          Manifest.permission.ACCESS_BACKGROUND_LOCATION
        ) != PackageManager.PERMISSION_GRANTED
      ) {
        val permissions = arrayOf(
          Manifest.permission.ACCESS_COARSE_LOCATION,
          Manifest.permission.ACCESS_FINE_LOCATION,
          Manifest.permission.ACCESS_BACKGROUND_LOCATION
        )

        // can't pass activity context 
        ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE);
      }
    

    // 2. create client
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)

    // 3. get location
    fusedLocationClient.lastLocation
      .addOnSuccessListener { location: Location? ->
        println(location)
        if (location != null) {
          println(location.latitude)
        }
        if (location != null) {
          println(location.longitude)
        }
      }

    ...


    }
  }

标签: androidandroid-jobscheduler

解决方案


推荐阅读