androidアプリ作成時のメモです。
845 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。
ChatGPTで自動プログラム作成に取り組み中。
https://www.osumoi-stdio.com/novel/