Kopirati u
Kopirati u activity_main.xml
Kopirati u main_activity.kt
package com.example.gpsbrzina
import android.Manifest
import android.content.pm.PackageManager
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.location.Location
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.*
class MainActivity : AppCompatActivity(), SensorEventListener {
private lateinit var locationText: TextView
private lateinit var speedText: TextView
private lateinit var accelerationText: TextView
private lateinit var elevationText: TextView
private lateinit var fusedLocationClient: FusedLocationProviderClient
private lateinit var sensorManager: SensorManager
private var acceleration = 0.0
private var currentAcceleration = 0.0
private var lastAcceleration = 0.0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
locationText = findViewById(R.id.locationText)
speedText = findViewById(R.id.speedText)
accelerationText = findViewById(R.id.accelerationText)
elevationText = findViewById(R.id.elevationText)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
requestLocationUpdates()
}
private fun requestLocationUpdates() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 100)
return
}
val locationRequest = LocationRequest.create().apply {
interval = 2000
fastestInterval = 1000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
fusedLocationClient.requestLocationUpdates(locationRequest, object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation?.let { location ->
val latitude = location.latitude
val longitude = location.longitude
val speedKmh = location.speed * 3.6
val altitude = location.altitude
locationText.text = "Lokacija: $latitude, $longitude"
speedText.text = "Brzina: %.2f km/h".format(speedKmh)
elevationText.text = "Nadmorska visina: %.2f m".format(altitude)
}
}
}, mainLooper)
}
override fun onResume() {
super.onResume()
sensorManager.registerListener(
this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL
)
}
override fun onPause() {
super.onPause()
sensorManager.unregisterListener(this)
}
override fun onSensorChanged(event: SensorEvent?) {
if (event?.sensor?.type == Sensor.TYPE_ACCELEROMETER) {
val x = event.values[0]
val y = event.values[1]
val z = event.values[2]
lastAcceleration = currentAcceleration
currentAcceleration = Math.sqrt((x * x + y * y + z * z).toDouble())
val delta = currentAcceleration - lastAcceleration
acceleration = acceleration * 0.9 + delta
accelerationText.text = "Ubrzanje: %.2f m/s²".format(acceleration)
}
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}
Kopirati u build.gradle.kts(Module :app)
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.gpsbrzina"
compileSdk = 34
defaultConfig {
applicationId = "com.example.gpsbrzina"
minSdk = 21
targetSdk = 34
versionCode = 1
versionName = "1.0"
// Dodaj ovo ako koristiš lokaciju
missingDimensionStrategy("location", "playServices")
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
buildFeatures {
viewBinding = true
}
// ✅ OVDE DODAJ
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
implementation("com.google.android.gms:play-services-location:21.0.1")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
}