Работа с сенсорами устройства на Android

В данной статье мы напишем простое приложение, отображающее уровень заряда батареи, температуру батареи и список доступных сенсоров на устройстве.

В последней версии ADT появился очень удобный шаблон для новых проектов, называется он Empty Activity.

БезымянныйШаблон подкупает своей простотой, т.к. не создает ничего лишнего.

Для вывода нужной нам информации отредактируем единственный файл разметки activity_main.xml

Визуально он будет выглядеть так:

СнимокА вот его содержимое:

[cce lang=»xml» tab_size=»2″ no_links=»false»]

<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»
tools:context=»${relativePackage}.${activityClass}» >

<TextView
android:id=»@+id/tv1″
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:text=»@string/hello_world» />

<TextView
android:id=»@+id/tv3″
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:layout_alignParentLeft=»true»
android:layout_below=»@+id/tv2″
android:layout_marginTop=»77dp»
android:text=»@string/hello_world» />

<TextView
android:id=»@+id/tv2″
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:layout_alignParentLeft=»true»
android:layout_below=»@+id/tv1″
android:layout_marginTop=»53dp»
android:text=»@string/hello_world» />

</RelativeLayout>

[/cce]

Теперь можно создать новый класс Tools , и в нем реализовать функции для получения информации об устройстве.

Уровень заряда батареи получим при помощи вот этой функции:

[cce lang=»java» tab_size=»2″ no_links=»false»]
public static String getBatteryLevel(Context c) {
Intent batteryIntent = c.registerReceiver(null, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
// Error checking that probably isn’t needed but I added just in case.
if (level == -1 || scale == -1) {
return String.valueOf(50.0f);
}
return String.valueOf(((float) level / (float) scale) * 100.0f) + «%»;
}

[/cce]

На вход её нужно подать контекст (Context ), на выходе получим строчку (String).

Температуру батареи получим при помощи вот этой функции, работает она также как и предыдущая:

[cce lang=»java» tab_size=»2″ no_links=»false»]

public static String getBatteryTemperatute(Context c) {
Intent intent = c.registerReceiver(null, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
float temp = ((float) intent.getIntExtra(
BatteryManager.EXTRA_TEMPERATURE, 0)) / 10;
return String.valueOf(temp) + «°C»;
}
[/cce]

Список доступных сенсоров на устройстве получим следующей функцией:

[cce lang=»java» tab_size=»2″ no_links=»false»]

public static ArrayList<String> getSensorsList(Context c) {
ArrayList<String> res = new ArrayList<String>();
SensorManager mSensorManager = (SensorManager) c
.getSystemService(Context.SENSOR_SERVICE);
// List of Sensors Available
List<Sensor> msensorList = mSensorManager
.getSensorList(Sensor.TYPE_ALL);
int i;
for (i = 0; i < msensorList.size(); i++) {
res.add(msensorList.get(i).getName());
}
return res;
}

[/cce]

На вход она также получает текущий контекст (Context), а на выходе даст список строк (ArrayList<String>), который мы преобразуем в одну строку.

Теперь осталось при запуске приложения вызвать все три функции и результат их поместить в TextView нашей статической разметки activity_main.xml

Вот весь код нашего изящного класса MainActivity:

[cce lang=»java» tab_size=»2″ no_links=»false»]

package com.rusdelphi.tools;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

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

}

@Override
protected void onStart() {
super.onStart();
TextView tv1 = (TextView) findViewById(R.id.tv1);
tv1.setText(«Уровень заряда батареи » + Tools.getBatteryLevel(this));
TextView tv2 = (TextView) findViewById(R.id.tv2);
tv2.setText(«Температура батареи » + Tools.getBatteryTemperatute(this));
TextView tv3 = (TextView) findViewById(R.id.tv3);
tv3.setText(«Список доступных сенсоров на устройстве »
+ Tools.getSensorsList(this).toString());
}
}
[/cce]

Приложение получилось очень простым и потому поддерживается большим числом устройств.

Вот устройство с Android 2.2device-2014-08-26-104545Вот с Android 4.0.3 device-2014-08-26-105143

Вот с Android 4.0.4 device-2014-08-26-105551
Вот с Android 4.4.4
device-2014-08-26-110132

Нашли ошибку в тексте?

Работа с сенсорами устройства на Android: 2 комментария

  1. Уведомление: Получение информации об устройстве | rusdelphi.com

  2. Уведомление: Получение информации с сенсоров устройства Android | rusdelphi.com

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *