場所を検索してアプリ内で表示

Kotlin

build.gradle(Module)

dependencies {
    implementation("com.google.android.gms:play-services-maps:18.2.0")
    implementation("com.google.android.gms:play-services-location:21.0.1")
}

AndroidManifest.xml

<manifest>
    <users-permission android:name="android.permission.INTERNET" />
    <users-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="APIキー" />
        <activity
            android:name=".HomeActivity" />
    </application>

activity_main.xml

<FrameLayout
    android:id="@+id/map_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<EditText
    android:id="@+id/etSearchWord"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="場所を入力" />

<Button
    android:id="@+id/btMapSearch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="検索" />

MainActivity.kt

class MainActivity : AppCompatActivity(), OnMapReadyCallback {
    private lateinit var mMap: GoogleMap
    private lateinit var geocoder: Geocoder

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //
        val mapFragment = SupportMapFragment.newInstance()
        supportFragmentManager.beginTransaction()
            .replace(R.id.map_container, mapFragment)
            .commit()

        mapFragment.getMapAsync(this)

        geocoder = Geocoder(this, Locale.getDefault())

        val btMapSearch = findViewById<Button>(R.id.btMapSearch)
        btMapSearch.setOnClickListener {
            searchLocation()
        }
    }

    // 東京を初期位置に設定
    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
        mMap.uiSettings.isZoomControlsEnabled = true
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(35.6895, 139.6917), 10f))
    }

    //
    private fun searchLocation() {
        val etSearchWord = findViewById<EditText>(R.id.etSearchWord)
        val searchWord = etSearchWord.text.toString()

        if (searchWord.isNotEmpty()) {
            try {
                val addressList = geocoder.getFromLocationName(searchWord, 1)
                if (addressList != null && addressList.isNotEmpty()) {
                    val address = addressList[0]
                    val latlng = LatLng(address.latitude, address.longitude)
                    mMap.clear()
                    mMap.addMarker(MarkerOptions().position(latLng).title(searchWord)
                    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f))
                } else {
                    Toast.makeText(this, "位置情報が見つかりません", Toast.LENGTH_LONG).show()
                }
            } catch (e: IOException) {
                e.printStackTrace()
                Toast.makeText(this, "検索エラー", Toast.LENGTH_LONG).show()
            }
        } else {
            Toast.makeText(this, "検索ワードを入力してください", Toast.LENGTH_LONG).show()
        }
    }
}
BACK