Android - Sensori

La maggior parte dei dispositivi Android dispone di sensori integrati che misurano il movimento, l'orientamento e varie condizioni ambientali. La piattaforma Android supporta tre ampie categorie di sensori.

  • Sensori di movimento
  • Sensori ambientali
  • Sensori di posizione

Alcuni sensori sono basati su hardware e altri sono sensori basati su software. Qualunque sia il sensore, Android ci consente di ottenere i dati grezzi da questi sensori e di utilizzarli nella nostra applicazione. Per questo Android ci fornisce alcune classi.

Android fornisce classi SensorManager e Sensor per utilizzare i sensori nella nostra applicazione. Per utilizzare i sensori, la prima cosa che devi fare è istanziare l'oggetto della classe SensorManager. Può essere ottenuto come segue.

SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);

La prossima cosa che devi fare è istanziare l'oggetto della classe Sensor chiamando il metodo getDefaultSensor () della classe SensorManager. La sua sintassi è data di seguito:

Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);

Una volta che il sensore è stato dichiarato, è necessario registrare il suo listener e sovrascrivere due metodi che sono onAccuracyChanged e onSensorChanged. La sua sintassi è la seguente:

sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

public void onSensorChanged(SensorEvent event) {
}

Ottenere l'elenco dei sensori supportati

È possibile ottenere un elenco di sensori supportati dal dispositivo chiamando il metodo getSensorList, che restituirà un elenco di sensori contenente il loro nome e numero di versione e molte altre informazioni. È quindi possibile iterare l'elenco per ottenere le informazioni. La sua sintassi è data di seguito:

sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
}

Oltre a questi metodi, ci sono altri metodi forniti dalla classe SensorManager per la gestione del framework dei sensori. Questi metodi sono elencati di seguito:

Suor n Metodo e descrizione
1

getDefaultSensor(int type)

Questo metodo ottiene il sensore predefinito per un determinato tipo.

2

getInclination(float[] I)

Questo metodo calcola l'angolo di inclinazione geomagnetica in radianti dalla matrice di inclinazione.

3

registerListener(SensorListener listener, int sensors, int rate)

Questo metodo registra un ascoltatore per il sensore

4

unregisterListener(SensorEventListener listener, Sensor sensor)

Questo metodo annulla la registrazione di un listener per i sensori con cui è registrato.

5

getOrientation(float[] R, float[] values)

Questo metodo calcola l'orientamento del dispositivo in base alla matrice di rotazione.

6

getAltitude(float p0, float p)

Questo metodo calcola l'altitudine in metri dalla pressione atmosferica e dalla pressione a livello del mare.

Esempio

Ecco un esempio che mostra l'uso della classe SensorManager. Crea un'applicazione di base che ti consente di visualizzare l'elenco dei sensori sul tuo dispositivo.

Per sperimentare questo esempio, puoi eseguirlo su un dispositivo reale o in un emulatore.

Passi Descrizione
1 Utilizzerai Android Studio per creare un'applicazione Android con un pacchetto com.example.sairamkrishna.myapplication.
2 Modifica il file src / MainActivity.java per aggiungere il codice necessario.
3 Modifica res / layout / activity_main per aggiungere i rispettivi componenti XML.
4 Esegui l'applicazione e scegli un dispositivo Android in esecuzione, installa l'applicazione su di esso e verifica i risultati.

Di seguito è riportato il contenuto del file modificato MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;

import android.util.Log;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.TextView;

import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorManager;

public class MainActivity extends Activity {
   TextView tv1=null;
   private SensorManager mSensorManager;
   @Override
   
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      tv1 = (TextView) findViewById(R.id.textView2);
      tv1.setVisibility(View.GONE);
      
      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
      List<Sensor> mList= mSensorManager.getSensorList(Sensor.TYPE_ALL);
      
      for (int i = 1; i < mList.size(); i++) {
         tv1.setVisibility(View.VISIBLE);
         tv1.append("\n" + mList.get(i).getName() + "\n" + mList.get(i).getVendor() + "\n" + mList.get(i).getVersion());
      }
   }
	
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

Di seguito è riportato il contenuto modificato del file xml activity_main.xml.

Nel codice sottostante abc indica il logo di tutorialspoint.com
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
   
   <TextView android:text="Sensor " android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:theme="@style/Base.TextAppearance.AppCompat" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="New Text"
      android:id="@+id/textView2"
      android:layout_below="@+id/imageView"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />

</RelativeLayout>

Di seguito è riportato il contenuto del file res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>

Di seguito è riportato il contenuto di AndroidManifest.xml file.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Proviamo a eseguire la nostra applicazione che abbiamo appena modificato. Presumo che tu abbia creato il tuoAVDdurante l'impostazione dell'ambiente. Per eseguire l'app da Android Studio, apri uno dei file di attività del tuo progetto e fai clic sull'icona Esegui dalla barra degli strumenti. Android Studio installa l'app sul tuo AVD e la avvia e se tutto va bene con la configurazione e l'applicazione, verrà visualizzata la seguente finestra dell'emulatore:

Ora se guarderai lo schermo del tuo dispositivo, vedrai l'elenco dei sensori supportati dal tuo dispositivo insieme al loro nome e versione e altre informazioni.

Se eseguissi questa applicazione su dispositivi diversi, l'output sarebbe diverso perché l'output dipende dal numero di sensori supportati dal tuo dispositivo.