package com.example.smart119 import android.app.NotificationChannel import android.app.NotificationManager import android.app.Service import android.content.Intent import android.content.pm.PackageManager import android.location.Location import android.os.IBinder import android.os.Looper import android.util.Log import androidx.core.app.ActivityCompat import androidx.core.app.NotificationCompat import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.LocationCallback import com.google.android.gms.location.LocationRequest import com.google.android.gms.location.LocationResult import com.google.android.gms.location.LocationServices import com.google.android.gms.location.Priority class LocationService : Service() { private lateinit var fusedLocationClient: FusedLocationProviderClient private lateinit var locationCallback: LocationCallback override fun onCreate() { super.onCreate() fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) locationCallback = object : LocationCallback() { override fun onLocationResult(result: LocationResult) { for (location: Location in result.locations) { // Log.d("LocationService", "위치: ${location.latitude}, ${location.longitude}") // TODO: 서버 전송 또는 처리 로직 추가 val lat = location.latitude val lon = location.longitude // ✅ LocationHelper에 위치 저장 LocationHelper.setCurrentLocation(lat, lon) println("[GPS_UPDATE] lon:${lon}, lat:${lat}") // ✅ Broadcast도 필요 시 같이 전송 // broadcastLocation(lat, lon) } } } startLocationUpdates() } private fun startLocationUpdates() { val request = LocationRequest.create().apply { interval = 5_000 fastestInterval = 3_000 priority = Priority.PRIORITY_HIGH_ACCURACY } if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) return fusedLocationClient.requestLocationUpdates(request, locationCallback, Looper.getMainLooper()) } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { startForegroundServiceWithNotification() return START_STICKY } private fun startForegroundServiceWithNotification() { val channelId = "location_service_channel" val channel = NotificationChannel( channelId, "Location Service", NotificationManager.IMPORTANCE_LOW ) val manager = getSystemService(NotificationManager::class.java) manager.createNotificationChannel(channel) val notification = NotificationCompat.Builder(this, channelId) .setContentTitle("위치 추적 중") .setContentText("백그라운드에서 위치를 추적하고 있습니다.") .setSmallIcon(R.drawable.ic_location_on) .build() try { startForeground(1, notification) } catch (e: Exception) { println(e.message) } } override fun onDestroy() { super.onDestroy() fusedLocationClient.removeLocationUpdates(locationCallback) } override fun onBind(intent: Intent?): IBinder? = null }