Android 获取当前定位

今天试着写了一个android获取定位的Demo贴上来以便以后查看,其中涉及到定位权限的判断以及获取

package com.lmm.locationdemo

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.location.Criteria
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Build
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    private var mLocationManager: LocationManager? = null
    private var mProvider: String? = null
    private val _requestPermissionCode = 1000
    private var mGPSText: TextView? = null

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

    private fun initView() {
        mGPSText = findViewById(R.id.gps)
    }

    private fun getLocationManager() {
        if (mLocationManager != null) {
            return
        }
        mLocationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
    }


    private fun getProvider():String? {
        val criteria = Criteria()
        criteria.accuracy = Criteria.ACCURACY_FINE
        criteria.isSpeedRequired = false
        criteria.isAltitudeRequired = false
        criteria.isBearingRequired = false
        criteria.isCostAllowed = false
        criteria.powerRequirement = Criteria.POWER_LOW
        getLocationManager()
        return mLocationManager?.getBestProvider(criteria, true)
    }

    private fun location() {

        if (!checkPermission()) {

            return
        }

        mProvider = getProvider()

        if (mProvider != null) {
            val location = mLocationManager?.getLastKnownLocation(mProvider!!)
            if (location != null) {
                val gpsStr = "纬度为:" + location!!.latitude + ",经度为:" + location!!.longitude
                mGPSText?.text = gpsStr
            }
            mLocationManager?.requestLocationUpdates(mProvider!!, 2000, 2f, locationListener)
        }
    }

    private val locationListener: LocationListener = object : LocationListener {
        override fun onLocationChanged(location: Location) {
            val gpsStr = "纬度为:" + location.latitude + ",经度为:" + location.longitude
            mGPSText?.text = gpsStr
        }

        override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
        override fun onProviderEnabled(provider: String) {}
        override fun onProviderDisabled(provider: String) {}
    }

    private fun checkPermission(): Boolean {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(
                    this,
                    Manifest.permission.ACCESS_FINE_LOCATION
                ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                    this,
                    Manifest.permission.ACCESS_COARSE_LOCATION
                ) != PackageManager.PERMISSION_GRANTED
            ) {
                requestPermission()
                return false
            }
        }

        return true
    }

    private fun requestPermission() {
        ActivityCompat.requestPermissions(
            this,
            arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION),
            _requestPermissionCode
        )
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == _requestPermissionCode) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                location()
            } else {
                requestPermission()
            }
        }
    }
}

AndroidManifest.xml文件中需要配置如下权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
京ICP备17066706号-1
0
希望看到您的想法,请您发表评论x