DAY26 把这个Google maps 放在 APP 上(二)

看到标题有个(二)该不会又是很长的系列文了吧!?

并不会。

因为有点复杂。微懒。


抓取目前所在位子

昨天做完那些步骤之後,Android Studio 里面预先帮你标注了澳洲雪梨的位子,你可以在 MapsActivity.kt 里面删除这个 marker 或是先保留,等之後再来放上你要标注的地点。

在做这些之前,先来抓取实际上你所在的位子。Google maps 内建了目前位置的按钮 (直接加在昨天开好的专案里面就好了):

override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap

    mMap.isMyLocationEnabled = true
}

正常来说新增了 isMyLocationEnabled 这行程序会被标记错误,你可以滑鼠可以直接移到错误的地方,点选 Add permission Check:

https://ithelp.ithome.com.tw/upload/images/20211011/201406388tFxuo338B.png

if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return
        }

在 TODO 的那行会要你要求写程序去要求权限,照着他的说明就会是这样:

override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap

        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            //要求有精确定位的权限,因精确定位里包含了粗绿定位
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 0)
            return
        }else
            mMap.isMyLocationEnabled = true
}

因为这个功能还要搭配一些权限,接下来在 AndroidManifest.xml 里增添一些权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapstest">

    <!--允许使用网路-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--粗略权限-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!--精确定位权限-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

其实里面已经帮你加好了精确定位,在这边补上允许粗略定位的权限。

以上都设定完成的话,在实机上的画面会是这样:

https://ithelp.ithome.com.tw/upload/images/20211011/20140638L6L4RHz6Sz.png

点击右上角的图示,就会移到目前的所在位置啦。


标记一个地点

在上面进行设定的时候,应该会发现 onMapReady 这个 fun 里面有已经设定好的雪梨标记点,其实只要程序後面的资讯,就可以改标记另一个地方:

val marker = MarkerOptions() //宣告一个 marker 变数
marker.position(LatLng(24.078311918785868, 120.71365502668787)) //放入要标记的点
marker.title("旦式设计")  // marker 名称
marker.draggable(false)  // marker 是否可以拖移
mMap.addMarker(marker)   //在地图加上 marker 这个标记点

运行之後点选标记点,标记名称就会显示在上方:

https://ithelp.ithome.com.tw/upload/images/20211011/201406387bQFSkznh0.png

Google Maps 的简单介绍就到这边啦。

下一篇见写写打家打家摆掰。


<<:  [Day 26] 实作-节庆详情页面

>>:  DAY 29 Big Data 5Vs – Value(价值) - AWS SageMaker & ML Family

连续 30 天 玩玩看 ProtoPie - Day 4

接下来要使用 ProtoPie Player 来进行分享。 如果 client 端手机或平板已经下载...

Day30 -- Countdown Clock

目标 今天要来做的是倒数计时器 Step1 let countdown; function time...

Day 4 - 介绍Laravel Eloquent ORM

前一篇介绍了如何运用 Laravel 框架设计模式规划大型专案,当中有提到Model,今天就来介绍这...

Day 18:将你的 Angular 更新到最新版!

今天要来谈谈如何查看 Angular 应用程序的版本及更新。 首先,我们要先知道目前本机端的 Ang...

Day 18 ( 中级 ) 阵列点灯 ( 显示图形 )

阵列点灯 ( 显示图形 ) 教学原文参考:阵列点灯 ( 显示图形 ) 这篇文章会介绍如何使用「阵列」...