Получение информации об устройстве

Часто в процессе разработки встает необходимость узнать какая версия Android  работает на устройстве.

Это бывает необходимо знать, когда используешь новые или устаревшие (deprecated) методы.

Перед работой с сетью, нужно проверить, а есть ли с ней соединение? И если есть , то какое?

Иначе может случиться так, что закачка файла в 300Mb по мобильному интернету вылетит пользователю в копеечку.

Лучше всего его об этом предупредить пользователя заранее, и только после этого начинать закачку.

Платформа Android  с радостью сообщит всю эту информацию, стоит только спросить.

Допишем пример из предыдущей статьи так, чтобы узнать всю эту информацию.

Изменим единственный файл разметки 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/tv_info”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentLeft=”true”
android:text=”@string/hello_world” />

<TextView
android:id=”@+id/tv1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_below=”@+id/tv_info”
android:layout_marginTop=”20dp”
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=”20dp”
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=”20dp”
android:text=”@string/hello_world” />

</RelativeLayout>

[/cce]

В элемент TextView с id tv_info будем выводить в один столбец всю нужную информацию.

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

Для получения информации о подключении к сени интернет, допишем в класс Tools функцию isOnline:

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

public static boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}

[/cce]

На вход она получает контекст (Context), использует ConnectivityManager и NetworkInfo и на выходе дает логическое значение (boolean) ,

означающее доступность или отсутствие подключения к интернету.

ConnectivityManager может дать информацию о доступности Wi-Fi или мобильного интернета (GPRS/EDGE/3G).

Для этого у него есть метод public boolean requestRouteToHost (int networkType, int hostAddress) нужно только указать тип подключения и адрес для проверки доступности(т.е. строку из ресурсов String). Вернёт метод логическое значение (boolean) , означающее доступность иди недоступность адреса по указанному соединению.

Вот пример вызова :

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

boolean isWiFi = false;
boolean isMobile = false;

ConnectivityManager cm = (ConnectivityManager) getActivity()
.getSystemService(Context.CONNECTIVITY_SERVICE);
// проверяем хост по вайфай
isWiFi = cm.requestRouteToHost(ConnectivityManager.TYPE_WIFI,
R.string.host_to_get);
// проверяем хост по мобильному
isMobile = cm.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI,
R.string.host_to_get);

[/cce]

Проверка доступности сети требует нужных прав у приложения (ACCESS_NETWORK_STATE) , поэтому добавим в манифест строчку:

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

<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />

[/cce]

Название модели, производителя,версии ПО и версии SDK получим из класса Build (android.os.Build).

Вот измененный код метода активности onStart:

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

@Override
protected void onStart() {
super.onStart();
TextView tv_info = (TextView) findViewById(R.id.tv_info);
String info = “Доступ к интернет:”
+ (Tools.isOnline(this) ? “есть” : “нет”)+”\n”;

info += “Модель:” + Build.MODEL + “\n”;
info += “Производитель:” + Build.MANUFACTURER + “\n”;
info += “Версия ПО: ” + Build.VERSION.RELEASE + “\n”;
info += “Версия SDK: ” + Build.VERSION.SDK_INT + “\n”;
tv_info.setText(info);

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]

В стоку info собираем все нужные данные, в первой строке присутствует тернарный условный оператор (Tools.isOnline(this) ? “есть” : “нет”).
Логика его такова, что в случае выполнения первого условия выполняется первый оператор, в обратном второй.

Далее идет последовательное добавление строк.

Теперь я покажу результаты запуска программы на всех сейчас  доступных устройствах.

Первое

device-2014-08-29-162032Второе

device-2014-08-29-162516Третье

device-2014-08-29-162731Четвертое

Безымянный

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

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