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

Часто в процессе разработки встает необходимость узнать какая версия 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 не будет опубликован. Обязательные поля помечены *