Prueba la aplicación en tu smartphone
Descarga la App en Google PlayAplicació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.SensorManagerpara poder mostrar un listado de los sensores que se encuentran disponibles en el dispositivo, sus características y datos de su funcionamiento.
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<Sensor> 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<Sensor> sensors = sensor_manager.getSensorList(Sensor.TYPE_ALL);
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
for (int i = 0; i < sensors.size(); ++i) {
Sensor sensor = sensors.get(i);
Map<String, String> 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.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<String> 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<String> adapter = new ArrayAdapter<String>(
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>
Visita este artículo en Mi Blog