簡體   English   中英

Android requestLocationUpdates 不起作用(GPS_PROVIDER、ACCESS_FINE_LOCATION)

[英]Android requestLocationUpdates not working (GPS_PROVIDER, ACCESS_FINE_LOCATION)

我正在嘗試在我的應用程序上實現地理定位功能,但我錯過了一些東西。

你們能幫幫我嗎?

在 AndroidManifest 我放了這些權限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

這是帶有警報的 MainActivity,如果地理位置關閉,則警告用戶:

class MainActivity : AppCompatActivity() {

    private lateinit var mLocationManager : LocationManager
    val mLocationListener = LocationListener {
        Log.i("Location", "latitude ${it.latitude}, logitude ${it.longitude}")
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mLocationManager = getSystemService(LOCATION_SERVICE) as LocationManager

        if (ActivityCompat.checkSelfPermission(
            this,
            Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,),
                7777
            )
        }
        checkGPSEnabled()
    }

    @SuppressLint("LongLogTag", "MissingPermission")
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        Log.i("onRequestPermissionsResult", "requestCode $requestCode, grantResults $grantResults")
        permissions.forEach {
            Log.i("onRequestPermissionsResult", "permission $it")
        }

        when(requestCode) {
            7777 -> {
                Log.i("onRequestPermissionsResult", "request sended")
                mLocationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER,
                    1000,
                    50F,
                    mLocationListener
                )
            }
        }
    }

    private fun checkGPSEnabled() {
        if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            val alertDialog: AlertDialog = AlertDialog.Builder(this).create()
            alertDialog.setMessage("Activate geolocation!")
            alertDialog.setButton(
                AlertDialog.BUTTON_NEUTRAL,
                "OK"
            ) { dialog, _ -> dialog.dismiss() }
            alertDialog.show()
        }
    }
}

更新

那是世襲18.1。 我在模擬器中嘗試了該應用程序,一切正常。

這是世襲18.1。

不同的手機是不同的手機。 GPS 具有高度的設備特定性。

資源

GPS 測試應用程序可以直接訪問硬件。 然而,這不是谷歌地圖的工作方式。 Google 地圖從 Google Play 服務獲取 GPS 坐標,因此,如果您的 Google Play 服務的位置服務未配置為在需要時運行。 這將是一個問題。

來源和可能的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM