Red de conocimiento informático - Material del sitio web - Cómo utilizar los sensores del teléfono móvil para determinar si te has caído

Cómo utilizar los sensores del teléfono móvil para determinar si te has caído

Utiliza un software para analizar los datos del sensor G (sensor de aceleración) para determinar si el usuario se ha caído. El requisito nos dice qué condiciones satisfacen los datos de salida del sensor cuando se puede determinar que el usuario se ha caído.

El sensor se lleva en el hombro o en la cintura. Se requiere que la tasa de falsos positivos sea inferior a 3.

El nuevo teléfono móvil puede detectar caídas accidentales de personas mayores

2007-07-11 10:23:24 Popularidad: 3077 veces Autor: Zzyq Editor: Zzyq[revelación] Comentarios (7 )

Un instituto de investigación de comunicaciones electrónicas de Corea del Sur anunció recientemente que se ha desarrollado con éxito un nuevo tipo de sistema de telefonía móvil diseñado para evitar que las personas mayores sufran lesiones por caídas. Si se cae, su teléfono móvil notificará automáticamente a su familia y al centro de emergencia.

Se informa que el sensor de este teléfono móvil detectará movimientos repentinos, como una caída, y luego enviará una señal al centro de datos del hospital. El centro de datos del hospital llamará inmediatamente al teléfono móvil para preguntar si. persona resulta herida. Si una persona mayor necesita asistencia, el centro de datos del hospital informará la situación al centro de emergencia y notificará a su familia. Además, este tipo de teléfono móvil también admite tecnología de posicionamiento GPS, que puede ayudar a los socorristas a localizar rápidamente la ubicación de la escena del accidente.

El Instituto Coreano de Investigación en Electrónica y Comunicaciones (ETRI) ha transferido esta tecnología a empresas de comunicaciones. Se espera que veamos productos relacionados en el mercado el próximo año.

Park Soo-jun, líder del equipo del proyecto ETRI, dijo: "Cuando este sensor pueda hacerse lo suficientemente pequeño, podrá instalarse en la hebilla de un teléfono móvil u otros accesorios. Simplemente descargue un programa y podrá identificar El teléfono móvil utilizado por el usuario se puede aplicar a cualquier teléfono móvil ”

Cómo determinar qué sensores tiene un teléfono móvil

Autor: Xu Fuan publicado. en 2011-5-29 22:30 : 44 Comentarios (0) Lecturas (1698)

Podemos utilizar el sensor en los siguientes tres pasos.

(1) Escribe una clase para interceptar eventos de sensores. Esta clase debe implementar la interfaz android.hardware.SensorEventListener.

(2) Obtener el objeto de gestión del sensor (objeto SensorManager).

(3) Utilice el método SensorManager.registerListener para registrar el sensor especificado.

El marco de la aplicación del sensor se ha construido mediante los tres pasos anteriores. El trabajo específico debe completarse en los métodos onSensorChanged y onAccuracyChanged de la interfaz SensorEventListener.

La interfaz SensorEventListener se define de la siguiente manera:

packageandroid.hardware

public interfaceSensorEventListener

{

//

Se llama cuando cambian los datos del sensor

public void onSensorChanged(SensorEventevent);

//

Se llama cuando cambia la precisión del sensor

public void onAccuracyChanged(Sensorsensor, int precision);

}

Copiar código

El objeto SensorManager se obtiene mediante el método getSystemService, el código es el siguiente:

SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

Copiar código

Normalmente, un teléfono móvil contiene varios módulos de sensores (como sensor de dirección, sensor de luz, etc.). Por lo tanto, para registrar el sensor es necesario especificar el tipo de sensor, ya que el siguiente código registra el sensor de luz.

sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),

SensorManager.SENSOR_DELAY_FASTEST);

Copiar código

El método RegisterListener tiene tres parámetros. El primer parámetro es un objeto que implementa la interfaz SensorEventListener. El segundo parámetro se utiliza para especificar el tipo de sensor. AndroidSDK predefine constantes que representan varios sensores y estas constantes se colocan en la clase Sensor. Por ejemplo, Sensor.TYPE_LIGHT en el código anterior. El tercer parámetro representa la velocidad a la que el sensor obtiene datos. Las constantes que se pueden configurar para este parámetro son las siguientes:

SENSOR_DELAY_FASTEST: obtiene datos del sensor a la velocidad más rápida.

SENSOR_DELAY_GAME: Adecuado para obtener datos de sensores en juegos.

SENSOR_DELAY_UI: Adecuado para obtener datos de sensores en controles UI.

SENSOR_DELAY_NORMAL: Obtiene datos del sensor a velocidad normal.

La velocidad de obtención de datos del sensor para los cuatro tipos anteriores disminuye en secuencia. En teoría, cuanto más rápido se obtienen los datos del sensor, mayores serán los recursos del sistema consumidos. Por lo tanto, se recomienda que los lectores elijan la velocidad adecuada para obtener datos del sensor según la situación real.

Si desea dejar de obtener datos del sensor, puede utilizar el método unregisterSensor para cancelar el registro del objeto de evento del sensor. El método unregisterSensor se define de la siguiente manera:

public voidunregisterListener(SensorEventListener oyente)

public voidunregisterListener(SensorEventListener oyente, Sensor sensor)

Copiar código

El método unregisterSensor tiene dos formas sobrecargadas. El primer formulario sobrecargado se utiliza para cancelar el registro de todos los objetos sensores.

El segundo formulario sobrecargado se utiliza para cancelar el registro del objeto de evento del sensor especificado. El objeto Sensor se obtiene mediante el método SensorManager.getDefaultSensor. El método getDefaultSensor tiene solo un parámetro de tipo int, que representa el tipo de sensor. Por ejemplo, Sensor.TYPE_LIGHT representa el sensor de luz.

Nota: Un objeto sensor puede manejar múltiples sensores. En otras palabras, una clase que implementa la interfaz SensorEventListener puede recibir datos devueltos por múltiples sensores. Para distinguir diferentes sensores, debe utilizar el método Sensor.getType para obtener el tipo de sensor. El método getType se presentará en detalle en los ejemplos de esta sección.

La información del sensor especificado se puede obtener a través del método SensorManager.getSensorList, y también se puede obtener la información de todos los sensores compatibles con el teléfono móvil. El código es el siguiente:

<. p>//

Obtener sensor de luz

Listlt;Sensorgt;sensors = sensorManager.getSensorList(Sensor.TYPE_LIGHT);

//

Obtener todos los sensores admitidos por el teléfono

Listlt;Sensorgt;sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

Copiar código

Lo siguiente es un ejemplo completo para demostrar cómo obtener los datos devueltos por el sensor. Este ejemplo obtiene datos de los siguientes 4 sensores y genera los nombres de todos los sensores admitidos por el teléfono de prueba.

Sensor de aceleración (Sensor.TYPE_ACCELEROMETER)

Sensor de campo magnético (Sensor.TYPE_MAGNETIC_FIELD)

Sensor de luz (Sensor.TYPE_LIGHT)

Sensor de dirección (TYPE_ORIENTATION)

Este ejemplo debe ejecutarse en una máquina real. Dado que diferentes teléfonos móviles pueden admitir diferentes sensores (algunos teléfonos móviles no admiten todos los sensores definidos en el SDK de Android), si los datos de un determinado sensor no se pueden mostrar después de ejecutar el programa, significa que el teléfono móvil actual no lo admite. sensor. El autor ha probado este ejemplo utilizando Google Nexus S. Si el lector también utiliza Google Nexus S, se generará información similar a la Figura 1.

Figura 1 Obtención de datos devueltos por el sensor

El código completo para este ejemplo es el siguiente:

paquete mobile.android;

importar java.util.List;

importar android.app.Activity;

importar android.hardware.Sensor;

importar android.hardware. SensorEvent;

importar android.hardware.SensorEventListener;

importar android.hardware.SensorManager;

importar android.os.Bundle;

importar android .widget.TextView;

la clase pública principal extiende la actividad implementa SensorEventListener

{

tvAccelerometer privado TextView;

TextView privado tvMagenic;

TextView tvLight privado

TextView tvOrientation privado

TextView tvSensors privado

@Override

public void onCreate(Bundle saveInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Obtener el objeto SensorManager

SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

//Registrar el sensor de aceleración

sensorManager.registerListener (this,

p>

sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),

SensorManager.SENSOR_DELAY_FASTEST

//Registrar sensor de campo magnético

);

sensorManager.registerListener(this ,

sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),

SensorManager.SENSOR_DELAY_FASTEST

//Registrar sensor de luz< /pag

>

sensorManager.registerListener(this,

sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),

SensorManager.SENSOR_DELAY_FASTEST

// Registrar sensor de dirección);

sensorManager.registerListener(this,

sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),

SensorManager.SENSOR_DELAY_FASTEST

tvAccelerometer =); (TextView) findViewById(R.id.tvAccelerometer);

tvMagentic = (TextView) findViewById(R.id.tvMagenic);

tvLight = (TextView) findViewById(R.id .tvLight);

tvOrientation = (TextView) findViewById(R.id.tvOrientation);

tvSensors = (TextView)findViewById(R.id.tvSensors

);

// Obtenga todos los sensores compatibles con el teléfono móvil actual

Listlt Sensorgt; sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

for(Sensor sensor: sensores)

p>

{

// Muestra el nombre del sensor actual

tvSensors.append(sensor.getName() "\n");

}

}

@Override

public void onSensorChanged(evento SensorEvent)

{

// A través del método getType para obtener el tipo de sensor que actualmente devuelve datos

switch (event.sensor.getType())

{

case Sensor. TYPE_ACCELEROMETER: // Maneja los datos de aceleración devueltos por el sensor

String acelerometer = "Acceleration\n" "X:" event.values[0] "\n"

"Y: " evento

.values[1] "\n" "Z:" event.values[2] "\n";

tvAccelerometer.setText(acelerómetro);

break;

case Sensor.TYPE_LIGHT: // Procesa los datos devueltos por el sensor de luz

tvLight.setText("Brightness:" event.values[0]);

break ;

case Sensor.TYPE_MAGNETIC_FIELD: // Procesa los datos devueltos por el sensor de campo magnético

String magentic = "Magnetic field\n" "X:" event.values[0] "\n" "Y:"

event.values[1] "\n" "Z:" event.values[2] "\n";

tvMagetic.setText (magentic);

break;

case Sensor.TYPE_ORIENTATION: // Procesa los datos devueltos por el sensor de orientación

Orientación de cadena = "Dirección\n" "X:" evento .valores[0] "\n"

"Y:" evento.valores[1] "\n" "Z:" evento.valores[2] "\n";

tvOrientation.setText(orientación)

break

}

}

@Override

public void onAccuracyChanged(Sensor sensor, precisión int)

{

}

}

Copiar código

El código anterior utiliza los datos de la matriz event.values ​​para obtener los datos devueltos por el sensor. Esta matriz de valores es muy importante, su longitud es 3. Pero no todos los elementos de la matriz son significativos. El significado de cada elemento de la matriz es diferente para diferentes sensores. El significado de cada elemento de la matriz de valores en diferentes sensores se presentará en detalle en la siguiente sección.

Nota: Aunque puede usar Sensor.TYPE_ALL para obtener toda la información del sensor admitida por su teléfono, no puede usar Sensor.TYPE_ALL para registrar todos los sensores. Es decir, el valor del parámetro del método getDefaultSensor debe ser un. tipo constante de un determinado sensor. No puede ser Sensor.TYPE_ALL.