App que muestra los sensores de un dispo ...

App que muestra los sensores de un dispositivo Android

Jun 21, 2021

Aplicación móvil Android con Java, desarrollada en Android Studio 4.2.1

Aplicaciones Nativas

Una de las ventajas de las aplicaciones nativas en este caso de la plataforma Android es que permite utilizar de manera más directa los recursos internos del dispositivo, en este ejemplo tenemos una manera de poder acceder a la información de los sensores de un smartpohne y las características que posee.

SensorAPP

Esta aplicación contiene el uso de la clase

android.hardware.SensorManager

para poder mostrar un listado de los sensores que se encuentran disponibles en el dispositivo, sus características y datos de su funcionamiento.



Android App Sensors details

MainActivity.java


package com.sensorapp;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class MainActivity extends AppCompatActivity {

    public List mSensors;

    static final String NAME = "name";
    static final String TYPE = "type";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SensorManager sensor_manager = (SensorManager)
                getSystemService(Context.SENSOR_SERVICE);
        List sensors = sensor_manager.getSensorList(Sensor.TYPE_ALL);

        List> list = new ArrayList>();

        for (int i = 0; i < sensors.size(); ++i) {
            Sensor sensor = sensors.get(i);
            Map map = new HashMap<>();
            map.put(NAME, sensor.getName());
            map.put(TYPE, "Type: " + sensor.getType());
            list.add(map);
        }

        SimpleAdapter adapter = new SimpleAdapter(
                this,
                list,
                android.R.layout.simple_list_item_2,
                new String[]{NAME, TYPE},
                new int[]{android.R.id.text1, android.R.id.text2}
        );

        ListView listView = (ListView) findViewById(R.id.listview);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        showDetails(position);

                    }
                }
        );

        mSensors = sensors;


    }

    public void showDetails(int position) {
        Intent intent = new Intent(this, DetailsActivity.class);
        intent.putExtra(TYPE, mSensors.get(position).getType());
        startActivity(intent);
    }


    @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);
    }
}





DetailsActivity.java


package com.coffee;
package com.sensorapp;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

/**
 * Created by Vladimir Salguero on 11/05/2016.
 */
public class DetailsActivity extends Activity {
    static final String TYPE = "type";

    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);

        setContentView(R.layout.details_activity);

        int type = getIntent().getIntExtra(MainActivity.TYPE, 0);

        SensorManager sensor_manager = (SensorManager)
                getSystemService(Context.SENSOR_SERVICE);

        Sensor sensor = sensor_manager.getDefaultSensor(type);

        ArrayList list = new ArrayList<>();

        ListView listView = (ListView) findViewById(R.id.details_view);


        list.add("Resolution: " + sensor.getResolution());
        list.add("Max range: " + sensor.getMaximumRange());
        list.add("Min delay: " + sensor.getMinDelay());
        list.add("Power: " + sensor.getPower());
        list.add("Vendor: " + sensor.getVendor());
        list.add("Version: " + sensor.getVersion());

        ArrayAdapter adapter = new ArrayAdapter(
                this, android.R.layout.simple_list_item_1, list
        );

        listView.setAdapter(adapter);


    }

    public void trySensor(View view) {
        Intent intent = new Intent(this, TrySensorActivity.class);
        int type = getIntent().getIntExtra(MainActivity.TYPE, 0);
        intent.putExtra(TYPE, type);
        startActivity(intent);
    }

}



TrySensorActivity.java


package com.sensorapp;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

import org.w3c.dom.Text;

/**
 * Created by Vladimir Salguero on 16/05/2016.
 */
public class TrySensorActivity extends Activity implements SensorEventListener {
    private SensorManager mSensorManager;
    TextView mTimeStamp;
    TextView mAccuracy;
    TextView[] mData;
    Sensor mSensor;

    @Override
    public final void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sensor_activity);
        mTimeStamp = (TextView) findViewById(R.id.timestamp);
        mAccuracy = (TextView) findViewById(R.id.accuracy);


        int type = getIntent().getIntExtra(DetailsActivity.TYPE, 0);

        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(type);

        //mostrar nombre del sensor
        TextView view = (TextView) findViewById(R.id.sensorname);
        view.setText(mSensor.getName());

        mData = new TextView[]{
                (TextView) findViewById(R.id.data1),
                (TextView) findViewById(R.id.data2),
                (TextView) findViewById(R.id.data3),
                (TextView) findViewById(R.id.data4),
                (TextView) findViewById(R.id.data5),
                (TextView) findViewById(R.id.data6),
                (TextView) findViewById(R.id.data7),
                (TextView) findViewById(R.id.data8),
                (TextView) findViewById(R.id.data9),
                (TextView) findViewById(R.id.data10),
        };


    }


    public final void onAccuracyChanged(Sensor sensor, int accuracy) {
        // Do something here if sensor accuracy changes.
        mAccuracy.setText("Accuracy: " + accuracy);
    }


    public final void onSensorChanged(SensorEvent event) {
        mTimeStamp.setText("Timestamp: " + String.valueOf(event.timestamp));

        float[] mValues;
        mValues = event.values;
        for (int i = 0; i < mValues.length; i++) {
            mData[i].setText("Data["; + i + "]" + mValues[i]);
        }


    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);

    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }


}




Layout

.../main/res/layout


activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">

        <ImageView
                android:layout_width="188dp"
                android:layout_height="132dp"
                android:gravity="center"
                android:scaleType="centerInside"
                android:src="@drawable/sensor" />

    </LinearLayout>


    <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/sensor_title"
            android:textColor="#3a5465"
            android:textStyle="bold"
            android:layout_marginBottom="10dp"
            android:textSize="26dp" />


    <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:scrollbars="vertical" />

    <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/creator"
            android:textColor="#666666"
            android:textSize="16dp" />


</LinearLayout>




details_activity.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:padding="16dp"
    android:orientation="vertical">

    <ListView
        android:id="@+id/details_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="trySensor"
        android:padding="16dp"
        android:text="TRY IT!" />


</LinearLayout>



sensor_activity.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:padding="12dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/sensorname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="12dp"
        android:textSize="24dp" />

    <TextView
        android:id="@+id/accuracy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="12dp"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/timestamp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="12dp"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/data1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/data10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

</LinearLayout>



Prueba la aplicación en tu smartphone


Descarga la App en Google Play

Descarga el Proyecto completo en GitHub

Prueba esta app en tu smartphone

Sensor App Android
Descarga la App en Google Play


Enjoy this post?

Buy YoLeo App a coffee

More from YoLeo App