iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0

接著昨天的挑戰,我們繼續把它完成吧。

Maps Activity

當 Android Studio 幫你建立好 GoogleMaps 的 Activity 的時候,他同時會 override onMapReady 讓我們做操作

class MapsActivity : AppCompatActivity(), OnMapReadyCallback {

    private lateinit var mMap: GoogleMap
    private lateinit var locationManager: LocationManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maps)
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        val mapFragment = supportFragmentManager
            .findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)

        locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager

        checkPermission()

    }

    @SuppressLint("MissingPermission")
    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
        mMap.isMyLocationEnabled = true
    }

舉例來說 isMyLocationEnabled 就提供了使用者所在位置小藍點的功能
在此同時我們也能夠在上面看到,我們在 onCreate 裡建立了一個實例化了一個 LocationManager

我們希望我們確認了使用者給予權限後,我們能夠取得使用者的當前位置於是我們就寫了一個 checkPermission 的 function 。

private fun checkPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0f, locationlistener)

        }else {
            return
        }
    }

這裡要我們使用了 locationManager 裡的 requestLocationUpdates 的 function。
我們可以看到幾個參數,第一個是選擇現在位置提供的方式,可能是網路或是 GPS ,我們這裡選擇使用網路。
第二與第三個參數分別代表,多久以及多遠要更新使用者現在的位置。
最後一個就是我們最重要的 listener 的部分。那現在就來看看 listener 在做些什麼吧。

private val locationlistener: LocationListener = object : LocationListener {
        override fun onLocationChanged(location: Location) {
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(location.latitude, location.longitude), 12.0f))
        }

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

        override fun onProviderEnabled(provider: String?) {}

        override fun onProviderDisabled(provider: String?) {}
    }

我們在這裡主要會用到 onLocationChanged 裡面所提供的 location 來取得經緯度。
再運用 Google Map 所提供的 animateCamera 裡的 CameraUpdateFactory 來移動鏡頭,到使用者的當前位置。
CameraUpdateFactory 裡有許多不同移動鏡頭的方式,需要更詳細的資料可以到參考文件中參考。

我們這裡使用的是 newLatLngZoom 他需要我們提供經緯度與你想縮放的 level。

參考文件

Permission overview

Request App Permissions

LocationManager

CameraUpdateFactory

今天就先這樣,我們明天見囉~~


上一篇
Day12_MyLocation_取得使用者權限
下一篇
Day14_Bottom Navigation
系列文
發現新大陸-Android Kotlin 開發之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言