iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

FindYourCoffee 專案的需求 :

  • [x] 點擊地圖標記顯示商家資訊
  • [ ] 顯示我的位置
  • [ ] 在地圖上顯示咖啡廳標記
  • [ ] 點擊地圖標記顯示咖啡廳資訊
  • [ ] 顯示我的位置附近的咖啡廳資訊
  • [ ] 加入篩選功能

昨天為了要顯示我的位置資訊,需要先向使用者取得位置權限。取完權限後要來繼續完成我們的需求 : 在地圖上顯示我的位置。

今天的實作範例 :

顯示我的位置

這邊先列出實作我的位置的程式碼,其實在昨天的文章已經有出現部分拉,來將程式碼拆解一下,順便完成顯示我的位置功能。

在地圖上啟用我的位置

取得使用者位置權限後,加入以下程式碼,表示啟用我的位置功能 :

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)
    }
}

輸出結果

  • 顯示我的位置按鈕

    d24_1.png

  • 點擊我的位置

    d24_2.png

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

    d24_4.png

    開心~~我們又解決了一個專案需求 :

    • [x] 點擊地圖標記顯示商家資訊
    • [x] 顯示我的位置
    • [ ] 在地圖上顯示咖啡廳標記
    • [ ] 點擊地圖標記顯示咖啡廳資訊
    • [ ] 顯示我的位置附近的咖啡廳資訊
    • [ ] 加入篩選功能

加油加油快完成拉~~~

今日推推

Yes


上一篇
Day23 在 Google 地圖上顯示全台咖啡廳資訊 - 2 向使用者取得位置權限
下一篇
Day25 在 Google 地圖上顯示全台咖啡廳資訊 - 4 顯示咖啡廳標記
系列文
喝咖啡要30天?一起用 Kotlin 打造尋找好喝咖啡的 App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言