获取当前位置 Android Kotlin

Posted

技术标签:

【中文标题】获取当前位置 Android Kotlin【英文标题】:Get current location Android Kotlin 【发布时间】:2018-12-21 03:22:19 【问题描述】:

我尝试在我的应用程序中使用 GM API 获取当前位置(使用 android Studio)。但是,如果我单击触发 getLocation() 功能的按钮,我总是会进入 catch 块,我不知道为什么。 我的移动设备已连接进行测试。

这里是 getLocation() 函数:

fun getLocation() 

    var locationManager = getSystemService(LOCATION_SERVICE) as LocationManager?

    var locationListener = object : LocationListener
        override fun onLocationChanged(location: Location?) 
            var latitute = location!!.latitude
            var longitute = location!!.longitude

            Log.i("test", "Latitute: $latitute ; Longitute: $longitute")

        

        override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) 
        

        override fun onProviderEnabled(provider: String?) 
        

        override fun onProviderDisabled(provider: String?) 
        

    

    try 
        locationManager!!.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0f, locationListener)
     catch (ex:SecurityException) 
        Toast.makeText(applicationContext, "Fehler bei der Erfassung!", Toast.LENGTH_SHORT).show()
    

这里是 onCreate 函数:

class CurrentLocationActivity : AppCompatActivity() 


lateinit var mapFragment : SupportMapFragment
lateinit var googleMap : GoogleMap

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

    //Karte erstellen
    mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
    mapFragment.getMapAsync(OnMapReadyCallback 
        googleMap = it
    )



    //OnClickListener um Location zu speichern
    btnGetCurrentLocation.setOnClickListener 
        getLocation()
    

【问题讨论】:

检查是否授予定位权限 不知何故我无法检查权限。如果我单击 Alt + Enter 并单击添加权限检查没有任何反应。此外,如果我输入手册,AndroidStudio 会在 Manifest.permission 中说,这是一个未解决的参考:权限 尝试在Settings > Apps > Your App > Info > Permissions 上手动设置访问位置的权限。如果可行,我们会发现问题,我会为您提供解决方案 【参考方案1】:

如下尝试

第 1 步。 放入您的 AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com....">

    <!-- This line -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application ... />

</manifest>

第 2 步。 将其放在您的位置请求上方

import android.Manifest
import android.content.pm.PackageManager
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat

...

fun getLocation() 

    ...

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) 
        ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                PERMISSION_REQUEST_ACCESS_FINE_LOCATION)
        return
    
    locationManager!!.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0f, locationListener)


override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode == PERMISSION_REQUEST_ACCESS_FINE_LOCATION) 
        when (grantResults[0]) 
            PackageManager.PERMISSION_GRANTED -> getLocation()
            PackageManager.PERMISSION_DENIED -> //Tell to user the need of grant permission
        
    


companion object 
    private const val PERMISSION_REQUEST_ACCESS_FINE_LOCATION = 100

【讨论】:

我仍然在 Manifest.permission.ACCESS_FINE_LOCATION 上获得“未解决的参考:权限”此外,我在 PERMISSION_REQUEST_ACCESS_FINE_LOCATION 上获得了“未解决的参考” PERMISSION_REQUEST_ACCESS_FINE_LOCATION 现在可以工作,但 Manifest.permission.ACCESS_FINE_LOCATION 上的“未解决的参考:权限”并没有消失。 删除这个电话import java.util.jar.Manifest 就可以了 谢谢你这工作!我改为导入 android.Manifest【参考方案2】:

如果未授予位置权限,LocationManager 将抛出 SecurityException。

可以在here找到为您的应用添加位置权限的信息。

【讨论】:

我注意到那个站点,但如果我复制代码,我总是在 Manifest.permission.ACCESS_FINE_LOCATION 中得到“未解析的引用:权限” 您可能导入了 java.util.jar.Manifest 而不是 android.Manifest 我有。这是我的导入: import android.Manifest.permission.ACCESS_FINE_LOCATION import android.content.pm.PackageManager import android.location.Location import android.location.LocationListener import android.location.LocationManager import android.support.v7.app.AppCompatActivity import android.os.Bundle 导入 android.support.v4.app.ActivityCompat 导入 android.support.v4.content.ContextCompat 导入 android.support.v4.content.ContextCompat.checkSelfPermission import android.util.Log import android.widget.Toast import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.OnMapReadyCallback import com.google.android .gms.maps.SupportMapFragment 导入 com.google.android.gms.maps.model.LatLng 导入 kotlinx.android.synthetic.main.activity_current_location.* 导入 java.util.jar.Manifest

以上是关于获取当前位置 Android Kotlin的主要内容,如果未能解决你的问题,请参考以下文章

获取当前位置位置android

Android 11:如何获取当前位置

从 Android 后台服务问题获取当前位置

Android:获取中国的当前位置

在android的服务中获取重复的当前位置?

Android怎么实现点击按钮获取当前位置的信息,没有地图的情况下。