Czujniki w Androidzie na przykładzie Akcelerometru

W Androidzie mamy bezpośredni dostęp do wszystkich czujników dzięki klasie SensorManager. Referencję do tej klasy uzyskujemy wywołując taką metodę:

menedzer = (SensorManager) getSystemService(SENSOR_SERVICE);

Oczywiście wpisując tam LOCATION_SERVICE mielibyśmy dostęp do klasy zarządzającej przetwornikiem GPS, a wpisując VIBRATOR_SERVICE mielibyśmy dostęp do baterii wibracyjnej itd. Więcej o tym możecie poczytać w dokumentacji.

Następnie wystarczy wybrać czujnik z dostępnych możliwośce:

czujnik = menedzer.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

i cieszyć się odczytami z czujnika.

Program który przedstawiłem poniżej jest prosty. Wybiera jeden czujnik (Akcelerometr TYPE_ACCELEROMETER) i wypisuje dane związane z czujnikiem na ekran, czyli w naszym przypaku X,Y, i Z. Następnie pobiera wszystkie dostępne czujniki i wypisuje je na ekran (bez pobierania danych z tych czujników). Program na moim HTC Desire wygląda następująco:

Cały program można pobrać tu:

package pl.nstrefa.avrkwiat.czujniki;

import java.util.List;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity  implements SensorEventListener {
 
 private SensorManager menedzer;       
 private TextView wyjscie; 
 private TextView lista_czujnikow;
 private List<Sensor> listaCzujnik;
 private Sensor czujnik;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 menedzer = (SensorManager) getSystemService(SENSOR_SERVICE);
 wyjscie = (TextView) findViewById(R.id.wyjscie);
 lista_czujnikow = (TextView) findViewById(R.id.lista_czujnikow);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.main, menu);
 return true;
 }

 @Override
 protected void onResume() {
 super.onResume();
 //Wybieramy Akcelerometr
 czujnik = menedzer.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 menedzer.registerListener(this, czujnik,SensorManager.SENSOR_DELAY_GAME);
 
 // Wybieramy wszystkie czujniki i wrzucamy je do listy 
 listaCzujnik = menedzer.getSensorList(Sensor.TYPE_ALL);
 StringBuilder napis = new StringBuilder();
 napis.append("wszystkie czujniki:\n");
 //wypisujemy listę czujników
 for (Sensor czujniki : listaCzujnik) {
 
 napis.append(czujniki.getName());
 napis.append(";\n");
 // menedzer.registerListener(this, czujniki,SensorManager.SENSOR_DELAY_NORMAL); //tu można odpalić wszystkie czujniki
 }
 lista_czujnikow.setText(napis);
 }

 @Override
 protected void onPause() {
 super.onPause();
 
 // W trakcie wstrzymania aplikacji zatrzymuje pobieranie aktualizowanych danych w celu
 // zaoszczędzenia energii
 menedzer.unregisterListener(this);
 
 }
 
 public void onAccuracyChanged(Sensor czujnik, int dokladnosc) {
 // Do zrobienia: automatycznie wygenerowany zalążek metody
 }
 
 public void onSensorChanged(SensorEvent zdarzenie) {
 
 StringBuilder konstruktor = new StringBuilder();
 konstruktor.append("Wybrany czujnik");
 konstruktor.append("\nNazwa: ");
 Sensor czujnik = zdarzenie.sensor;
 konstruktor.append(czujnik.getName());
 konstruktor.append("\nProducent: ");
 konstruktor.append(czujnik.getVendor());
 konstruktor.append("\nWersja: ");
 konstruktor.append(czujnik.getVersion());
 konstruktor.append("\nMaksymalny zasięg: ");
 konstruktor.append(czujnik.getMaximumRange());
 konstruktor.append("\nZasilanie: ");
 konstruktor.append(czujnik.getPower());
 konstruktor.append("\nDokładność: ");
 konstruktor.append(zdarzenie.accuracy);
 konstruktor.append("\nWartości:\n");
 
 for (int i = 0; i < zdarzenie.values.length; i++) {             
 konstruktor.append("   [");
 //konstruktor.append(i);
 if(i==0){konstruktor.append("x");}
 if(i==1){konstruktor.append("y");}
 if(i==2){konstruktor.append("z");}
 
 konstruktor.append("] = ");
 konstruktor.append(zdarzenie.values[i]);
 konstruktor.append("\n");          
 }
 
 wyjscie.setText(konstruktor);
 
 }
 
}


Aby pobrać cały projekt kliknij tutaj