android

androidアプリ作成時のメモです。

620 views

GPSから緯度・経度を取得して、googleのgeocoderで座標を住所に変換するプログラム。

MainActivity.kt

package com.example.gpsapri

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.core.app.ActivityCompat
import com.google.gson.GsonBuilder
import com.google.maps.GeoApiContext
import com.google.maps.GeocodingApi
import com.google.maps.model.LatLng
import org.w3c.dom.Text

class MainActivity : AppCompatActivity() {
    lateinit var locationManager:LocationManager
    lateinit var locationListener:LocationListener
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btn = findViewById<Button>(R.id.button)
        val latText = findViewById<TextView>(R.id.lat)
        latText.text = "緯度を表示します"
        val lngText = findViewById<TextView>(R.id.lng)
        lngText.text = "経度を表示します"

        locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        locationListener = GPSLocationListener()
        if(ActivityCompat.checkSelfPermission(applicationContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            val permissions = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION)
            ActivityCompat.requestPermissions(this, permissions, 1000)
        }
        else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
        }

        //locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
        btn.setOnClickListener {
            latText.text = "押された"
            lngText.text = "押された"

        }
    }

    override fun onPause() {
        super.onPause()
        locationManager.removeUpdates(locationListener)
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {

            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
            return
        }
    }

    private inner class GPSLocationListener : LocationListener {
        override fun onLocationChanged(location: Location?) {
            val latText = findViewById<TextView>(R.id.lat)
            latText.text = location?.latitude.toString()

            val lngText = findViewById<TextView>(R.id.lng)
            lngText.text = location?.longitude.toString()

            val address = findViewById<TextView>(R.id.address)

            val apiKey = "APIキー" 
            val context = GeoApiContext.Builder().apiKey(apiKey).build()

            val latLng = location?.latitude?.let { LatLng(it, location?.longitude) }
            try {
                val results = GeocodingApi.reverseGeocode(context, latLng).language("ja").awaitIgnoreError()
                val gson = GsonBuilder().setPrettyPrinting().create()
                address.text =  gson.toJson(results[0].formattedAddress)
                Log.d("konishi", "aaa")
            }
            catch(e:Exception) {
                e.printStackTrace()
                Log.d("konishi", e.message)
            }
            locationManager.removeUpdates(this)
        }

        override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
        }

        override fun onProviderEnabled(provider: String?) {
            Toast.makeText(applicationContext, "onProviderEnabled", Toast.LENGTH_LONG).show()
        }

        override fun onProviderDisabled(provider: String?) {
        }

    }
}

AndroidManifest.xml

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

build.gradle

    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'com.google.maps:google-maps-services:0.10.0'
    implementation 'org.slf4j:slf4j-simple:1.7.26'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    implementation 'com.squareup.okhttp3:okhttp:3.4.1'

Page 13 of 19.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626