繁体   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