FindYourCoffee 專案的需求 :
昨天為了要顯示我的位置資訊,需要先向使用者取得位置權限。取完權限後要來繼續完成我們的需求 : 在地圖上顯示我的位置。
今天的實作範例 :
這邊先列出實作我的位置的程式碼,其實在昨天的文章已經有出現部分拉,來將程式碼拆解一下,順便完成顯示我的位置功能。
取得使用者位置權限後,加入以下程式碼,表示啟用我的位置功能 :
map.isMyLocationEnabled = true
/**
 * Enables the My Location layer if the fine location permission has been granted.
 */
@SuppressLint("MissingPermission")
private fun enableMyLocation() {
    // 1. Check if permissions are granted, if so, enable the my location layer
    if (ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.ACCESS_FINE_LOCATION
        ) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.ACCESS_COARSE_LOCATION
        ) == PackageManager.PERMISSION_GRANTED
    ) {
        map.isMyLocationEnabled = true
        return
    }
    // 2. Otherwise, request permission
    ActivityCompat.requestPermissions(
        this,
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        ),
        MainActivity.LOCATION_PERMISSION_REQUEST_CODE
    )
}
OnMyLocationButtonClickListener : 如果使用者按下「我的位置」按鈕,應用程式就會收到來自 GoogleMap.OnMyLocationButtonClickListener 的 onMyLocationButtonClick() 的 callback。OnMyLocationClickListener : • 如果使用者按下「我的位置」藍點,應用程式就會收到來自 GoogleMap.OnMyLocationClickListener 的 onMyLocationClick() callback。class MainActivity : AppCompatActivity(),
    GoogleMap.OnMyLocationButtonClickListener,
    GoogleMap.OnMyLocationClickListener, OnMapReadyCallback
    // ...
}
我們可以在收到 callback 處做相對應的處理,這邊就簡單的跳出吐司 :
override fun onMyLocationButtonClick(): Boolean {
    Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_LONG)
        .show()
    // Return false so that we don't consume the event and the default behavior still occurs
    // (the camera animates to the user's current position).
    return false
}
override fun onMyLocationClick(location: Location) {
    Toast.makeText(this, "Current location:\n$location", Toast.LENGTH_LONG)
}
在取得 googleMap 的地方將 ClickListener 設定給地圖 :
override fun onMapReady(googleMap: GoogleMap) {
    // ...
    // 取得位置權限
    requestLocationPermissions()
    with(map) {
        setOnMyLocationButtonClickListener(this@MainActivity)
        setOnMyLocationClickListener(this@MainActivity)
    }
}
顯示我的位置按鈕

點擊我的位置

點擊我的位置的藍點點,會出現我的位置設定的資訊,包含經緯度等等

開心~~我們又解決了一個專案需求 :
加油加油快完成拉~~~