Kotlin - Как отобразить диалоговое окно LocationSettingsRequest, когда устройство заблокировано - PullRequest
1 голос
/ 25 марта 2019

У меня есть действие, которое запускается событием, и я использую этот код, чтобы иметь возможность отображать его, пока мое устройство заблокировано.

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
            setShowWhenLocked(true)
            setTurnScreenOn(true)
            val pm=getSystemService(Context.POWER_SERVICE)as PowerManager
            pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"FireApp:test2").acquire(1000000)
            val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
            keyguardManager.requestDismissKeyguard(this, null)
        }else{

            this.window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
        }

Он работает нормально, когда мое устройство заблокировано, пока я не хочу отобразить диалоговое окно LocationSettingsRequest, используя этот код:

fun displayLocationSettingsRequest(context: Context) {
        val googleApiClient = GoogleApiClient.Builder(context)
                .addApi(LocationServices.API).build()
        googleApiClient.connect()

        val locationRequest = LocationRequest.create()
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
        locationRequest.setInterval(5000)
        locationRequest.setFastestInterval(2000)

        val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
        builder.setAlwaysShow(true)


        val result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build())
        result.setResultCallback (object: ResultCallback<LocationSettingsResult> {
            override fun onResult(result: LocationSettingsResult) {
                val status = result.status
                if (status.statusCode == LocationSettingsStatusCodes.SUCCESS) {
                    Log.d("Martin", "Lokacija je vključena!")
                }
                if (status.statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED) {
                    try {
                        status.startResolutionForResult(this@medAlarmom2, 0x1)
                    } catch (e: IntentSender.SendIntentException) {
                        Log.d("Martin", "PendingIntent unable to execute request.")
                    }

                }
                if (status.statusCode == LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE) Log.d("Martin", "Location settings are inadequate, and cannot be fixed here. Dialog "+"not created.")
            }
        })
    }

Я не могу найти хорошее решение, чтобыиметь возможность отображать это диалоговое окно без разблокировки устройства.У кого-нибудь есть решение для этого?

Спасибо миллиону!Martin

...