Contenidos
Cliente en Apple Watch
Permiso para acceder a la localización GPS (Allow access to location on Apple Watch)
Código de la aplicación para Apple Watch que envía la posición GPS cuando se pulsa a un botón
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import SwiftUI import CoreLocation class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate { private var locationManager = CLLocationManager() @Published var locationText = "Ubicación: No disponible" override init() { super.init() locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters } func requestLocation() { locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } let latitude = location.coordinate.latitude let longitude = location.coordinate.longitude locationText = "Ubicación: Latitud \(latitude), Longitud \(longitude)" // Envío de la ubicación al servidor sendMessage(latitude: latitude, longitude: longitude) } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { locationText = "Error al obtener la ubicación" } func sendMessage(latitude: Double, longitude: Double) { let messageToSend = "Latitud: \(latitude), Longitud: \(longitude)" if let url = URL(string: "http://192.168.1.55:6002/send-message") { var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("application/text", forHTTPHeaderField: "Content-Type") // Establece el tipo de contenido let data = messageToSend.data(using: .utf8) // Convierte el mensaje a datos request.httpBody = data let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error.localizedDescription)") } else if let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) { print("Mensaje enviado con éxito") } else { print("Error al enviar el mensaje") } } task.resume() } else { print("URL no válida") } } } struct ContentView: View { @StateObject private var locationManager = LocationManager() var body: some View { VStack { Text(locationManager.locationText) .padding() Button("Obtener Ubicación") { locationManager.requestLocation() } .padding() } } } @main struct pruebaApp: App { var body: some Scene { WindowGroup { ContentView() } } } |
Servidor web que recibe la posición GPS desde el Apple Watch y la almacena en un fichero
Importar librerías
1 2 3 4 |
io.ktor:ktor-server-netty:1.6.7 io.ktor:ktor-gson:1.6.7 org.slf4j:slf4j-simple:2.0.0-alpha1 org.slf4j:slf4j-simple:1.7.32 |
Código del servidor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import io.ktor.application.* import io.ktor.http.* import io.ktor.request.* import io.ktor.response.* import io.ktor.routing.* import io.ktor.server.engine.* import io.ktor.server.netty.* import java.io.File fun main() { val server = embeddedServer(Netty, port = 6001) { routing { post("/send-message") { val receivedMessage = call.receiveText() println("Mensaje recibido: $receivedMessage") // Escribe los valores en un archivo writeToFile(receivedMessage) call.respond(HttpStatusCode.OK, "Mensaje recibido: $receivedMessage") } } } server.start(wait = true) } // Función para escribir en un archivo fun writeToFile(message: String) { val file = File("valores.txt") // Nombre del archivo donde se almacenarán los valores file.appendText("$message\n") // Agrega el nuevo valor al archivo (con un salto de línea) } |