plugmate-virtual-sensor-access.ino
Ejemplo de uso de la API de ubicación de Android para leer coordenadas transmitidas por el host, ya que PlugMate no tiene GPS físico.
PlugMate virtualiza periféricos como el GPS. Este código usa APIs estándar de Android. El host debe tener permiso para compartir su ubicación con el cliente PlugMate. Los datos llegan a través del túnel seguro. No se requiere permiso de ubicación física en la tarjeta, pero la aplicación debe solicitar el permiso ACCESS_FINE_LOCATION a nivel de interfaz de usuario estándar de Android.
plugmate-virtual-sensor-access.ino
package com.trustkernel.plugmate.demo
import android.content.Context
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Bundle
import android.util.Log
/**
* Accès aux capteurs virtuels.
* Le PlugMate ne possède pas de GPS physique. Les données sont
* transmises depuis l'hôte via le canal USB-C chiffré.
*/
class VirtualLocationListener(context: Context) : LocationListener {
private val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
init {
try {
// Demande des mises à jour de localisation
// Le PlugMate reçoit des coordonnées simulées ou réelles de l'hôte
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
1000L, // minTime ms
1.0f, // minDistance m
this
)
} catch (e: SecurityException) {
Log.e("PlugMate", "Permission de localisation manquante", e)
}
}
override fun onLocationChanged(location: Location) {
Log.d("PlugMate", "GPS Virtuel: Lat=${location.latitude}, Lon=${location.longitude}")
// Traiter la position
}
override fun onProviderEnabled(provider: String) {}
override fun onProviderDisabled(provider: String) {}
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
fun stop() {
locationManager.removeUpdates(this)
}
}