接著昨天的挑戰,我們繼續把它完成吧。
當 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。
今天就先這樣,我們明天見囉~~