5. LocationListener With Kotlin(2)
페이지 정보
작성자 관리자 댓글 0건 조회 3,531회 작성일 20-03-15 17:09본문
MainActivity.kt 파일의 전체 코드는 아래를 참조하십시오.
파일명 : MainActivity.kt
package kr.co.leelab.locationtest
import android.Manifest
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationManager
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Looper
import android.provider.Settings
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.*
import java.text.SimpleDateFormat
import java.util.*
class MainActivity : AppCompatActivity() {
private var mFusedLocationProviderClient: FusedLocationProviderClient? = null
private val INTERVAL: Long = 2000
private val FASTEST_INTERVAL: Long = 1000
lateinit var mLastLocation: Location
internal lateinit var mLocationRequest: LocationRequest
private val REQUEST_PERMISSION_LOCATION = 10
lateinit var btnStartupdate: Button
lateinit var btnStopUpdates: Button
lateinit var txtLat: TextView
lateinit var txtLong: TextView
lateinit var txtTime: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mLocationRequest = LocationRequest()
btnStartupdate = findViewById(R.id.btn_start_upds)
btnStopUpdates = findViewById(R.id.btn_stop_upds)
txtLat = findViewById(R.id.txtLat);
txtLong = findViewById(R.id.txtLong);
txtTime = findViewById(R.id.txtTime);
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
buildAlertMessageNoGps()
}
btnStartupdate.setOnClickListener {
if (checkPermissionForLocation(this)) {
startLocationUpdates()
btnStartupdate.isEnabled = false
btnStopUpdates.isEnabled = true
}
}
btnStopUpdates.setOnClickListener {
stoplocationUpdates()
txtTime.text = "Updates Stoped"
btnStartupdate.isEnabled = true
btnStopUpdates.isEnabled = false
}
}
fun checkPermissionForLocation(context: Context): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED){
true
}else{
// Show the permission request
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
REQUEST_PERMISSION_LOCATION)
false
}
} else {
true
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == REQUEST_PERMISSION_LOCATION) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//We have to add startlocationUpdate() method later instead of Toast
Toast.makeText(this,"Permission granted",Toast.LENGTH_SHORT).show()
}
}
}
private fun buildAlertMessageNoGps() {
val builder = AlertDialog.Builder(this)
builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
.setCancelable(false)
.setPositiveButton("Yes") { dialog, id ->
startActivityForResult(
Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
, 11)
}
.setNegativeButton("No") { dialog, id ->
dialog.cancel()
finish()
}
val alert: AlertDialog = builder.create()
alert.show()
}
private val mLocationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
// do work here
locationResult.lastLocation
onLocationChanged(locationResult.lastLocation)
}
}
fun onLocationChanged(location: Location) {
// New location has now been determined
mLastLocation = location
if (mLastLocation != null) {
val date: Date = Calendar.getInstance().time
val sdf = SimpleDateFormat("hh:mm:ss a")
txtTime.text = "Updated at : " + sdf.format(date)
txtLat.text = "LATITUDE : " + mLastLocation.latitude
txtLong.text = "LONGITUDE : " + mLastLocation.longitude
// You can now create a LatLng Object for use with maps
}
}
protected fun startLocationUpdates() {
// Create the location request to start receiving updates
mLocationRequest = LocationRequest()
mLocationRequest!!.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
mLocationRequest!!.setInterval(INTERVAL)
mLocationRequest!!.setFastestInterval(FASTEST_INTERVAL)
// Create LocationSettingsRequest object using location request
val builder = LocationSettingsRequest.Builder()
builder.addLocationRequest(mLocationRequest!!)
val locationSettingsRequest = builder.build()
val settingsClient = LocationServices.getSettingsClient(this)
settingsClient.checkLocationSettings(locationSettingsRequest)
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
// new Google API SDK v11 uses getFusedLocationProviderClient(this)
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return
}
mFusedLocationProviderClient!!.requestLocationUpdates(mLocationRequest, mLocationCallback,
Looper.myLooper())
}
private fun stoplocationUpdates() {
mFusedLocationProviderClient!!.removeLocationUpdates(mLocationCallback)
}
}
이제 프로젝트를 실행하십시오!
댓글목록
등록된 댓글이 없습니다.