Многие популярные приложения прогноза погоды в Google Play либо содержат много рекламы, либо требуют слишком большого количества разрешений, либо содержат функционал, который большинство из нас никогда не используют. Было бы здорово, если бы мы могли создать собственное приложение погоды с нуля?
В этом уроке я покажу вам, как это сделать. Наше приложение будет иметь простой и минималистичный пользовательский
интерфейс, показывающий пользователю именно то, что ему нужно знать о
текущих погодных условиях. Давайте начнем.
1. Подготовка
Прежде чем продолжить, дважды проверьте, что у вас установлены следующие компоненты:
- Eclipse ADT Bundle: вы можете скачать его на веб-сайте разработчика Android.
- Ключ API OpenWeatherMap : это не обязательно для выполнения нашей задачи, но это бесплатно. Вы можете получить его, зарегистрировавшись на сайте OpenWeatherMap.
- Иконки: Я рекомендую вам скачать шрифт weather icons font, созданный Эриком Флорсом. Вам нужно загрузить файл TTF, потому что мы будем использовать его в
нативном приложении. Мы будем использовать этот шрифт чтобы показывать
различные значки в зависимости от погодных условий.
2. Создадим новый проект
Я собираюсь назвать это приложение SimpleWeather, но вы можете дать ему любое имя, которое вам понравится. Введите уникальное имя пакета, установите минимальный необходимый SDK
на Android 2.2 и установите целевой SDK на Android 4.4. Вы можете оставить тему Holo Dark.
Это приложение будет иметь только одно Activity, и оно будет основано на шаблоне Blank Activity, как показано ниже.
Назовите Activity WeatherActivity. Мы будем использовать Fragment внутри этого Activity. Макет, связанный с Activity называется activity_weather.xml. Макет, связанный с Fragment называется fragment _weather.xml.
3. Добавим пользовательский шрифт
Скопируйте weathericons-regular-webfont.ttf в каталог assets/fonts вашего проекта и переименуйте его в weather.ttf.
4. Отредактируем файл манифеста
Единственное разрешение, которое требуется этому приложению — это android.permission.INTERNET.
1 |
<uses-permission android:name="android.permission.INTERNET"/> |
Чтобы упростить этот урок, мы рассмотрим только портретный режим. Узел activity манифеста должен выглядеть так:
1 |
<activity
|
2 |
android:name="ah.hathi.simpleweather.WeatherActivity" |
3 |
android:label="@string/app_name" |
4 |
android:screenOrientation="portrait" |
5 |
>
|
6 |
<intent-filter>
|
7 |
<action android:name="android.intent.action.MAIN" /> |
8 |
<category android:name="android.intent.category.LAUNCHER" /> |
9 |
</intent-filter>
|
10 |
</activity>
|
5. Отредактируем макет Activity
В activity_weather.xml изменений не так много. Он должен уже включать в себя FrameLayout. Добавьте дополнительное свойство, чтобы изменить цвет фона на #FF0099CC.
1 |
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" |
2 |
xmlns:tools="http://schemas.android.com/tools" |
3 |
android:id="@+id/container" |
4 |
android:layout_width="match_parent" |
5 |
android:layout_height="match_parent" |
6 |
tools:context="ah.hathi.simpleweather.WeatherActivity" |
7 |
tools:ignore="MergeRootFrame" |
8 |
android:background="#FF0099CC" /> |
6. Отредактируем макет Fragment
Измените файл fragment_weather.xml, добавив пять тегов TextView, чтобы отобразить следующую информацию:
- город и страна
- текущая температура
- значок, показывающий текущее погодное условие
- отметка времени, указывающая пользователю, когда было получено последнее обновление информация о погоде
- более подробная информация о текущей погоде, например, описание и влажность
Используйте RelativeLayout для размещения текстовых представлений. Вы можете настроить textSize для различных устройств.
1 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
2 |
xmlns:tools="http://schemas.android.com/tools" |
3 |
android:layout_width="match_parent" |
4 |
android:layout_height="match_parent" |
5 |
android:paddingBottom="@dimen/activity_vertical_margin" |
6 |
android:paddingLeft="@dimen/activity_horizontal_margin" |
7 |
android:paddingRight="@dimen/activity_horizontal_margin" |
8 |
android:paddingTop="@dimen/activity_vertical_margin" |
9 |
tools:context="ah.hathi.simpleweather.WeatherActivity$PlaceholderFragment" > |
10 |
|
11 |
<TextView
|
12 |
android:id="@+id/city_field" |
13 |
android:layout_width="wrap_content" |
14 |
android:layout_height="wrap_content" |
15 |
android:layout_alignParentTop="true" |
16 |
android:layout_centerHorizontal="true" |
17 |
android:textAppearance="?android:attr/textAppearanceLarge" /> |
18 |
|
19 |
<TextView
|
20 |
android:id="@+id/updated_field" |
21 |
android:layout_width="wrap_content" |
22 |
android:layout_height="wrap_content" |
23 |
android:layout_below="@+id/city_field" |
24 |
android:layout_centerHorizontal="true" |
25 |
android:textAppearance="?android:attr/textAppearanceMedium" |
26 |
android:textSize="13sp" /> |
27 |
|
28 |
<TextView
|
29 |
android:id="@+id/weather_icon" |
30 |
android:layout_width="wrap_content" |
31 |
android:layout_height="wrap_content" |
32 |
android:layout_centerVertical="true" |
33 |
android:layout_centerHorizontal="true" |
34 |
android:textAppearance="?android:attr/textAppearanceLarge" |
35 |
android:textSize="70sp" |
36 |
/>
|
37 |
|
38 |
<TextView
|
39 |
android:id="@+id/current_temperature_field" |
40 |
android:layout_width="wrap_content" |
41 |
android:layout_height="wrap_content" |
42 |
android:layout_alignParentBottom="true" |
43 |
android:layout_centerHorizontal="true" |
44 |
android:textAppearance="?android:attr/textAppearanceLarge" |
45 |
android:textSize="40sp" /> |
46 |
|
47 |
<TextView
|
48 |
android:id="@+id/details_field" |
49 |
android:layout_width="wrap_content" |
50 |
android:layout_height="wrap_content" |
51 |
android:layout_below="@+id/weather_icon" |
52 |
android:layout_centerHorizontal="true" |
53 |
android:textAppearance="?android:attr/textAppearanceMedium" |
54 |
/>
|
55 |
|
56 |
</RelativeLayout>
|
7. Изменим strings.xml
Этот файл содержит строки, используемые в нашем приложении, а также коды символов Юникода, которые мы будем использовать для отображения значков погоды. Приложение сможет отображать восемь различных типов погодных условий. Если вам нужно больше, примените следующую хитрость. Добавьте следующие
значения в файл values/strings.xml:
1 |
<?xml version="1.0" encoding="utf-8"?>
|
2 |
<resources>
|
3 |
|
4 |
<string name="app_name">Simple Weather</string> |
5 |
<string name="change_city">Change city</string> |
6 |
|
7 |
<!-- Put your own APP ID here -->
|
8 |
<string name="open_weather_maps_app_id">11111</string> |
9 |
|
10 |
<string name="weather_sunny"></string> |
11 |
<string name="weather_clear_night"></string> |
12 |
|
13 |
<string name="weather_foggy"></string> |
14 |
<string name="weather_cloudy"></string> |
15 |
<string name="weather_rainy"></string> |
16 |
<string name="weather_snowy"></string> |
17 |
<string name="weather_thunder"></string> |
18 |
<string name="weather_drizzle"></string> |
19 |
|
20 |
<string name="place_not_found">Sorry, no weather data found.</string> |
21 |
|
22 |
</resources>
|
8. Добавим пункт меню
Пользователь должен иметь возможность выбирать город, чью погоду они хотят видеть. Измените файл menu/weather.xml и добавьте элемент для этой опции.
1 |
<menu xmlns:android="http://schemas.android.com/apk/res/android" |
2 |
xmlns:app="http://schemas.android.com/apk/res-auto" |
3 |
xmlns:tools="http://schemas.android.com/tools" |
4 |
tools:context="ah.hathi.simpleweather.WeatherActivity" > |
5 |
|
6 |
<item
|
7 |
android:id="@+id/change_city" |
8 |
android:orderInCategory="1" |
9 |
android:title="@string/change_city" |
10 |
app:showAsAction="never"/> |
11 |
|
12 |
</menu>
|
Теперь, когда все XML-файлы готовы к использованию, давайте перейдем к запросу на API OpenWeatherMap для получения данных о погоде.
9. Получаем данные из OpenWeatherMap
Мы можем получить текущие данные о погоде в любом городе, в формате JSON, с помощью API OpenWeatherMap. В строке запроса мы передаем имя города и систему измерения, в которой должны быть результаты.
Например, чтобы получить текущую информацию о погоде в Канберре, используя метрическую систему, мы отправляем запрос на http://api.openweathermap.org/data/2.5/weather?q=Canberra&units=metric
Ответ, который мы получаем через API, выглядит так:
1 |
{
|
2 |
"base": "cmc stations", |
3 |
"clouds": { |
4 |
"all": 90 |
5 |
},
|
6 |
"cod": 200, |
7 |
"coord": { |
8 |
"lat": -35.28, |
9 |
"lon": 149.13 |
10 |
},
|
11 |
"dt": 1404390600, |
12 |
"id": 2172517, |
13 |
"main": { |
14 |
"humidity": 100, |
15 |
"pressure": 1023, |
16 |
"temp": -1, |
17 |
"temp_max": -1, |
18 |
"temp_min": -1 |
19 |
},
|
20 |
"name": "Canberra", |
21 |
"sys": { |
22 |
"country": "AU", |
23 |
"message": 0.313, |
24 |
"sunrise": 1404335563, |
25 |
"sunset": 1404370965 |
26 |
},
|
27 |
"weather": [ |
28 |
{
|
29 |
"description": "overcast clouds", |
30 |
"icon": "04n", |
31 |
"id": 804, |
32 |
"main": "Clouds" |
33 |
}
|
34 |
],
|
35 |
"wind": { |
36 |
"deg": 305.004, |
37 |
"speed": 1.07 |
38 |
}
|
39 |
}
|
Создайте новый класс Java и назовите его RemoteFetch.java. Этот класс отвечает за получение данных о погоде через API OpenWeatherMap.
Мы используем класс HttpURLConnection для выполнения удаленного запроса. API OpenWeatherMap ожидает ключ API в HTTP-заголовке с именем x-api-key. Это определено в нашем запросе с использованием метода setRequestProperty.
Мы используем BufferedReader для чтения ответа API в StringBuffer. Когда мы получим полный ответ, мы преобразуем его в объект JSONObject.
Как видно из приведенного выше ответа, данные JSON содержат поле с именем cod. Его значение равно 200, если запрос был успешным. Мы используем это значение, чтобы проверить, имеет ли ответ JSON текущую информацию о погоде или нет.
Класс RemoteFetch.java должен выглядеть следующим образом:
1 |
package ah.hathi.simpleweather; |
2 |
|
3 |
import java.io.BufferedReader; |
4 |
import java.io.InputStreamReader; |
5 |
import java.net.HttpURLConnection; |
6 |
import java.net.URL; |
7 |
|
8 |
import org.json.JSONObject; |
9 |
|
10 |
import android.content.Context; |
11 |
import android.util.Log; |
12 |
|
13 |
public class RemoteFetch { |
14 |
|
15 |
private static final String OPEN_WEATHER_MAP_API = |
16 |
"http://api.openweathermap.org/data/2.5/weather?q=%s&units=metric"; |
17 |
|
18 |
public static JSONObject getJSON(Context context, String city){ |
19 |
try { |
20 |
URL url = new URL(String.format(OPEN_WEATHER_MAP_API, city)); |
21 |
HttpURLConnection connection = |
22 |
(HttpURLConnection)url.openConnection(); |
23 |
|
24 |
connection.addRequestProperty("x-api-key", |
25 |
context.getString(R.string.open_weather_maps_app_id)); |
26 |
|
27 |
BufferedReader reader = new BufferedReader( |
28 |
new InputStreamReader(connection.getInputStream())); |
29 |
|
30 |
StringBuffer json = new StringBuffer(1024); |
31 |
String tmp=""; |
32 |
while((tmp=reader.readLine())!=null) |
33 |
json.append(tmp).append("n"); |
34 |
reader.close(); |
35 |
|
36 |
JSONObject data = new JSONObject(json.toString()); |
37 |
|
38 |
// This value will be 404 if the request was not
|
39 |
// successful
|
40 |
if(data.getInt("cod") != 200){ |
41 |
return null; |
42 |
}
|
43 |
|
44 |
return data; |
45 |
}catch(Exception e){ |
46 |
return null; |
47 |
}
|
48 |
}
|
49 |
}
|
10. Сохраним город в настройках
Пользователь не должен указывать имя города каждый раз, когда захочет использовать приложение. Приложение должно запомнить последний город, который искал пользователь. Мы делаем это, используя SharedPreferences. Однако вместо прямого доступа к этим настройкам из нашего класса Activity, для этого лучше создать отдельный класс.
Создайте новый класс Java и назовите его CityPreference.java. Чтобы сохранить и получить имя города, создайте два метода setCity и getCity. Объект SharedPreferences инициализируется в конструкторе. Класс CityPreference.java должен выглядеть следующим образом:
1 |
package ah.hathi.simpleweather; |
2 |
|
3 |
import android.app.Activity; |
4 |
import android.content.SharedPreferences; |
5 |
|
6 |
public class CityPreference { |
7 |
|
8 |
SharedPreferences prefs; |
9 |
|
10 |
public CityPreference(Activity activity){ |
11 |
prefs = activity.getPreferences(Activity.MODE_PRIVATE); |
12 |
}
|
13 |
|
14 |
// If the user has not chosen a city yet, return
|
15 |
// Sydney as the default city
|
16 |
String getCity(){ |
17 |
return prefs.getString("city", "Sydney, AU"); |
18 |
}
|
19 |
|
20 |
void setCity(String city){ |
21 |
prefs.edit().putString("city", city).commit(); |
22 |
}
|
23 |
|
24 |
}
|
11. Создадим Fragment
Создайте новый класс Java и назовите его WeatherFragment.java. В этом фрагменте в качестве макета используется frag_weather.xml. Объявите пять объектов TextView и инициализируйте их в методе onCreateView. Объявите новый объект Typeface с именем weatherFont. Объект TypeFace указывает на веб-шрифт, который вы загрузили и сохранили в папке assets/fonts.
Мы будем использовать отдельный Thread для асинхронного получения данных через API OpenWeatherMap. Мы не можем обновить пользовательский интерфейс из подобного фонового потока. Поэтому нам нужен объект Handler, который мы инициализируем в конструкторе класса WeatherFragment.
1 |
public class WeatherFragment extends Fragment { |
2 |
Typeface weatherFont; |
3 |
|
4 |
TextView cityField; |
5 |
TextView updatedField; |
6 |
TextView detailsField; |
7 |
TextView currentTemperatureField; |
8 |
TextView weatherIcon; |
9 |
|
10 |
Handler handler; |
11 |
|
12 |
public WeatherFragment(){ |
13 |
handler = new Handler(); |
14 |
}
|
15 |
|
16 |
@Override
|
17 |
public View onCreateView(LayoutInflater inflater, ViewGroup container, |
18 |
Bundle savedInstanceState) { |
19 |
View rootView = inflater.inflate(R.layout.fragment_weather, container, false); |
20 |
cityField = (TextView)rootView.findViewById(R.id.city_field); |
21 |
updatedField = (TextView)rootView.findViewById(R.id.updated_field); |
22 |
detailsField = (TextView)rootView.findViewById(R.id.details_field); |
23 |
currentTemperatureField = (TextView)rootView.findViewById(R.id.current_temperature_field); |
24 |
weatherIcon = (TextView)rootView.findViewById(R.id.weather_icon); |
25 |
|
26 |
weatherIcon.setTypeface(weatherFont); |
27 |
return rootView; |
28 |
}
|
29 |
}
|
Инициализируем объект weatherFont, вызывая createFromAsset в классе Typeface. Мы также вызываем метод updateWeatherData в onCreate.
1 |
@Override
|
2 |
public void onCreate(Bundle savedInstanceState) { |
3 |
super.onCreate(savedInstanceState); |
4 |
weatherFont = Typeface.createFromAsset(getActivity().getAssets(), "fonts/weather.ttf"); |
5 |
updateWeatherData(new CityPreference(getActivity()).getCity()); |
6 |
}
|
В updateWeatherData, мы запускаем новый поток и вызываем getJSON в классе RemoteFetch. Если значение, возвращаемое getJSON, равно null, мы выводим сообщение об ошибке пользователю. Если это не так, мы вызываем метод renderWeather.
Только основной поток разрешает обновлять пользовательский интерфейс приложения для Android. Вызов Toast или renderWeather прямо из фонового потока приведет к ошибке выполнения. Вот почему мы вызываем эти методы с использованием метода post—обработчика.
1 |
private void updateWeatherData(final String city){ |
2 |
new Thread(){ |
3 |
public void run(){ |
4 |
final JSONObject json = RemoteFetch.getJSON(getActivity(), city); |
5 |
if(json == null){ |
6 |
handler.post(new Runnable(){ |
7 |
public void run(){ |
8 |
Toast.makeText(getActivity(), |
9 |
getActivity().getString(R.string.place_not_found), |
10 |
Toast.LENGTH_LONG).show(); |
11 |
}
|
12 |
});
|
13 |
} else { |
14 |
handler.post(new Runnable(){ |
15 |
public void run(){ |
16 |
renderWeather(json); |
17 |
}
|
18 |
});
|
19 |
}
|
20 |
}
|
21 |
}.start(); |
22 |
}
|
Метод renderWeather использует данные JSON для обновления объектов TextView. Узел weather ответа JSON представляет собой массив данных. В этом уроке мы будем использовать только первый элемент массива метеорологических данных.
1 |
private void renderWeather(JSONObject json){ |
2 |
try { |
3 |
cityField.setText(json.getString("name").toUpperCase(Locale.US) + |
4 |
", " + |
5 |
json.getJSONObject("sys").getString("country")); |
6 |
|
7 |
JSONObject details = json.getJSONArray("weather").getJSONObject(0); |
8 |
JSONObject main = json.getJSONObject("main"); |
9 |
detailsField.setText( |
10 |
details.getString("description").toUpperCase(Locale.US) + |
11 |
"n" + "Humidity: " + main.getString("humidity") + "%" + |
12 |
"n" + "Pressure: " + main.getString("pressure") + " hPa"); |
13 |
|
14 |
currentTemperatureField.setText( |
15 |
String.format("%.2f", main.getDouble("temp"))+ " ℃"); |
16 |
|
17 |
DateFormat df = DateFormat.getDateTimeInstance(); |
18 |
String updatedOn = df.format(new Date(json.getLong("dt")*1000)); |
19 |
updatedField.setText("Last update: " + updatedOn); |
20 |
|
21 |
setWeatherIcon(details.getInt("id"), |
22 |
json.getJSONObject("sys").getLong("sunrise") * 1000, |
23 |
json.getJSONObject("sys").getLong("sunset") * 1000); |
24 |
|
25 |
}catch(Exception e){ |
26 |
Log.e("SimpleWeather", "One or more fields not found in the JSON data"); |
27 |
}
|
28 |
}
|
В конце метода renderWeather мы вызываем setWeatherIcon с идентификатором текущей погоды, а также временем восхода и захода солнца. Настройка значка погоды немного сложна, потому что API OpenWeatherMap поддерживает больше погодных условий, чем мы можем отобразить с помощью используемого веб-шрифта. К счастью, идентификаторы погоды следуют шаблону, о котором вы можете узнать больше на веб-сайте OpenWeatherMap.
Так мы будем сопоставлять идентификатор погоды с иконкой:
- коды погоды в диапазоне 200 обозначают грозу, что означает, что мы можем использовать
R .string.weather_thunderдля них - коды погоды в диапазоне 300 связаны с моросями, и мы используем
R.string.weather_drizzle - коды погоды в диапазоне 500 означают дождь, и мы используем
R.string.weather_rain - и так далее …
Мы используем время восхода и захода солнца, чтобы отобразить солнце или луну, в зависимости от текущего времени суток и только в том случае, если погода ясная.
1 |
private void setWeatherIcon(int actualId, long sunrise, long sunset){ |
2 |
int id = actualId / 100; |
3 |
String icon = ""; |
4 |
if(actualId == 800){ |
5 |
long currentTime = new Date().getTime(); |
6 |
if(currentTime>=sunrise && currentTime<sunset) { |
7 |
icon = getActivity().getString(R.string.weather_sunny); |
8 |
} else { |
9 |
icon = getActivity().getString(R.string.weather_clear_night); |
10 |
}
|
11 |
} else { |
12 |
switch(id) { |
13 |
case 2 : icon = getActivity().getString(R.string.weather_thunder); |
14 |
break; |
15 |
case 3 : icon = getActivity().getString(R.string.weather_drizzle); |
16 |
break; |
17 |
case 7 : icon = getActivity().getString(R.string.weather_foggy); |
18 |
break; |
19 |
case 8 : icon = getActivity().getString(R.string.weather_cloudy); |
20 |
break; |
21 |
case 6 : icon = getActivity().getString(R.string.weather_snowy); |
22 |
break; |
23 |
case 5 : icon = getActivity().getString(R.string.weather_rainy); |
24 |
break; |
25 |
}
|
26 |
}
|
27 |
weatherIcon.setText(icon); |
28 |
}
|
Конечно, вы можете обрабатывать больше погодных условий, соответственно изменяя метод setWeatherIcon.
Наконец, добавим метод changeCity к фрагменту, чтобы пользователь мог обновить текущий город. Метод changeCity будет вызываться только из основного класса Activity.
1 |
public void changeCity(String city){ |
2 |
updateWeatherData(city); |
3 |
}
|
12. Редактируем Activity
В течении настройки проекта, Eclipse заполняет WeatherActivity.java некоторым шаблонным кодом. Замените стандартную реализацию метода onCreate на приведенную ниже, в которой мы используем WeatherFragment. Метод onCreate должен выглядеть следующим образом:
1 |
@Override
|
2 |
protected void onCreate(Bundle savedInstanceState) { |
3 |
super.onCreate(savedInstanceState); |
4 |
setContentView(R.layout.activity_weather); |
5 |
|
6 |
if (savedInstanceState == null) { |
7 |
getSupportFragmentManager().beginTransaction() |
8 |
.add(R.id.container, new WeatherFragment()) |
9 |
.commit(); |
10 |
}
|
11 |
}
|
Затем отредактируйте метод onOptionsItemSelected и обработайте единственный параметр меню, который у нас есть. Все, что вам нужно сделать, это вызвать метод showInputDialog.
В методе showInputDialog мы используем AlertDialog.Builder для создания объекта Dialog, который предлагает пользователю ввести имя города. Эта информация передается методу changeCity, который хранит имя города с использованием класса CityPreference и вызывает метод changeCity во фрагменте.
1 |
@Override
|
2 |
public boolean onOptionsItemSelected(MenuItem item) { |
3 |
if(item.getItemId() == R.id.change_city){ |
4 |
showInputDialog(); |
5 |
}
|
6 |
return false; |
7 |
}
|
8 |
|
9 |
private void showInputDialog(){ |
10 |
AlertDialog.Builder builder = new AlertDialog.Builder(this); |
11 |
builder.setTitle("Change city"); |
12 |
final EditText input = new EditText(this); |
13 |
input.setInputType(InputType.TYPE_CLASS_TEXT); |
14 |
builder.setView(input); |
15 |
builder.setPositiveButton("Go", new DialogInterface.OnClickListener() { |
16 |
@Override
|
17 |
public void onClick(DialogInterface dialog, int which) { |
18 |
changeCity(input.getText().toString()); |
19 |
}
|
20 |
});
|
21 |
builder.show(); |
22 |
}
|
23 |
|
24 |
public void changeCity(String city){ |
25 |
WeatherFragment wf = (WeatherFragment)getSupportFragmentManager() |
26 |
.findFragmentById(R.id.container); |
27 |
wf.changeCity(city); |
28 |
new CityPreference(this).setCity(city); |
29 |
}
|
Теперь ваше приложение для погоды готово. Соберите проект и установите его на Android-устройстве для тестирования.
Заключение
Теперь у вас есть полнофункциональное приложение прогноза погоды. Изучайте API OpenWeatherMap для дальнейшего развития вашего приложения. Вы также можете использовать больше значков погоды, так как в примере мы используем только немногие из них.
В XXI веке больше не нужно искать прогноз погоды в газетах и ждать соответствующей программы по телевизору. Достаточно открыть нужное приложение на смартфоне. Современные утилиты расскажут об изменениях в течение дня, давлении, скорости ветра и даже о качестве воздуха в регионе.
Многие приложения имеют виджеты. Они упрощают доступ к информации. Пользователю не нужно открывать саму утилиту, чтобы узнать нужные данные. Достаточно поставить виджет на рабочий стол, и прогноз погоды всегда будет под рукой. В этом материале расскажем, как установить, поменять и убрать виджет погоды на экране Айфона и Андроида.

Виджет погоды на телефон на Андроид
Лучшие виджеты погоды для Андроида
Яндекс.Погода
Погода Live
Погода Россия XL ПРО
Как установить виджет погоды на экране Айфона
Сторонние приложения
Прогноз погоды & виджет
eWeather HD: красивая погода
Weawow
Виджет погоды на телефон на Андроид
Метод подходит для большинства смартфонов на Андроиде. Например: Xiaomi, Redmi, Poco, Samsung, Huawei, Meizu и т. д. Из-за индивидуальных особенностей оболочек и их версий названия и/или расположение значков могут немного отличаться.
Нужно зажать пальцем на пустом месте рабочего стола. После этого внизу или вверху экрана появятся кнопки «Обои», «Виджеты», «Настройки».
В первом пункте можно заменить картинку, которая стоит на рабочем столе. В меню «Настройки» можно выбрать:
- внешний вид рабочего стола;
- размер значков;
- сетку виджетов;
- добавить или убрать анимацию значков и другое.
Сейчас нам нужен пункт «Виджеты». Если нажать на него, откроется новое меню. В нём собраны все доступные для размещения значки. Стандартно предустановлены 2–3 варианта: просто прогноз (температура, осадки) и виджет часы и погода для Андроида.
Нужно выбрать подходящий вариант, разместить его на рабочем столе, нажать «Готово». Если на активном рабочем столе нет места или вы хотите перенести виджет на новый — зажмите значок и начните перетаскивать влево или вправо.

Как выбрать город и настроить приложение? Для этого можно:
- нажать на сам виджет;
- найти среди приложений утилиту «Погода».
В обоих случаях откроется одинаковое меню. В нём можно:
- добавить новый город — нужно нажать на «+» в левом верхнем углу. Теперь в открытом приложении вы сможете переключаться между нужными городами. Важно: в виджете будет отображаться информация по актуальному городу (где находитесь);
- выбрать, в чём измерять температуру, скорость ветра, атмосферное давление, обновлять ли информацию ночью и добавлять ли звуковые эффекты при открытии города;
- посмотреть прогноз на 5 дней;
- узнать индекс качества воздуха, вероятность осадков, давление, влажность, температуру, время восхода и заката солнца.

Как удалить виджет погоды на рабочем столе? Для этого нужно зажать виджет и нажать на кнопку «Удалить», которая появится на экране. После этого, например, можно заменить стандартный виджет на другой, более стильный. О том, как это сделать, рассказали ниже.
Лучшие виджеты погоды для Андроида
Стандартное приложение берёт данные из AccuWeather* и имеет скромный дизайн.
При желании в Play Market можно скачать другие утилиты. Важно: не у всех есть виджет. Часть утилит работает только как приложение — его нужно разместить на рабочем столе и, чтобы посмотреть погоду, зайти в него. В этом блоке собрали только те, у которых есть виджеты для экрана Андроида.
*AccuWeather — компания из США, которая предоставляет услуги прогнозирования погоды по всему миру.
Яндекс.Погода
Благодаря технологии Meteum, как обещает разработчик, повышена точность прогноза. Можно точно определить, будет ли дождь в вашем дворе или нет.
Особенности:
– это бесплатный виджет погоды для Андроида;
– интерактивная карта с осадками, как на сайте;
– виджет можно разместить на главном экране, главном экране с картой осадков, на панели уведомлений;
– прогноз погоды на 10 дней, а не 5, как в стандартном приложении;
– точность утилиты могут повышать сами пользователи. Например, отметить, действительно ли идёт дождь сейчас в вашем районе.
Недостаток — есть реклама. Это баннеры, которые сменяют друг друга (внизу и в центре экрана).

Погода Live
Утилита яркая и красочная. Оформление подстраивается под прогноз: заснеженные деревья, снежинки, дождь, если это соответствует действительности. Этот виджет погоды для Андроида на русском можно разместить на главном экране.
В открытом приложении можно узнать:
- ежедневный (10 суток) и почасовой прогноз;
- влажность, точку росы, вероятность осадков, УФ-индекс, облачность, давление и скорость ветра, качество воздуха.
В бесплатной версии есть тонкая полоска рекламы внизу экрана (время от времени пропадает). Также в этой версии доступно 10 вариантов виджетов для рабочего стола. Каждый можно настроить. Например, поменять цвет, размер, интенсивность фона.
Есть платная версия. В ней:
- прогноз погоды на 45 дней и детальный на 120 часов;
- нет рекламы;
- больше настроек для виджетов. Например, разблокированы все доступные цвета, формы.
Цена — 279 рублей в год, 449 рублей навсегда.

Погода Россия XL ПРО
Ещё один виджет погоды на Android, о котором хочется рассказать. Выглядит привлекательно и необычно. Тут нет привычного виджета. Прогноз погоды можно разместить:
- на панели уведомлений. Если опустить шторку, можно увидеть актуальную температуру, вероятность осадков, скорость ветра, ближайшее изменение температуры;
- на главном экране;
- на главном экране и экране блокировки.
Но во втором и третьем случаях выглядит это нетипично. Меняются сами обои. Они становятся анимированными и подстраиваются под актуальную погоду. В нижней части экрана появляется надпись «Город и температура».
Важно: если на смартфоне установлена тема с индивидуальным экраном блокировки, отображаться живые обои не будут. Например, если темой предусмотрена только картинка + отображение заряда батареи.
Утилита бесплатная, рекламы нет. Можно добавить несколько городов и листать их в самом приложении. В виджете будет отображаться актуальное местоположение.

Как установить виджет погоды на экране Айфона
Сделать это на iPhone очень просто. Для установки на экране «Домой» или «Сегодня» нужно:
- выбрать экран, на котором нужен виджет и зажать пустую область пальцем;
- на экране появится значок «+». Нажмите на него, чтобы открыть список доступных иконок;
- выберите нужный, нажмите на «Добавить виджет» — «Готово».
Чтобы установить виджет погоды на экран блокировки Айфон (iPhone), нужно:
- зажать палец на активном экране блокировки, пока не появится кнопка «Настроить», затем нажать на неё;
- нажать на виджет или переместить его на свободную область;
- выбрать «Готово».
Работает этот способ в версии iOS 16.
Чтобы удалить виджет, достаточно зажать его и выбрать «Удалить виджет» — «Удалить».
Сторонние приложения
Если дизайн предустановленной утилиты вас не устраивает, можно заменить её на другую, из магазина приложений.
Прогноз погоды & виджет
Бесплатная и простая утилита со стандартным набором опций. Можно посмотреть погоду на 5 дней, узнать вероятность осадков, скорость ветра и его направление, УФ индекс, узнать о вероятности метели или грозы.

eWeather HD: красивая погода
Это платный виджет на рабочий стол Айфона стоимостью 379 рублей. Утилита действительно красочная и красивая. Есть версии на Mac, iPhone, iPad, Apple Watch. Доступны несколько вариантов настраиваемых виджетов.
Доступны почасовой прогноз и на 15 дней, барометр, предупреждения (гроза, метель, землетрясение). Утилита расскажет о приливах и отливах, температуре воды в вашем регионе. Есть анимация погоды, интерактивная карта.

Weawow
Главные достоинства: отсутствие рекламы и стильный дизайн. Прогноз дополнен тематическими фото, которые соответствуют актуальной погоде. Можно настроить, что будет отображать приложение: только температуру, давление и температуру, скорость ветра, УФ-индекс, влажность, облачность, качество воздуха и другое. Этот виджет погоды на русском языке можно скачать бесплатно.

Надеемся, что этот материал помог вам добавить виджет погоды на экран Айфона или Андроида. А если у вас есть любимое приложение для отслеживания температуры, расскажите о нём в комментариях.
Погода на экране телефона стала для нас заменой термометров, которые раньше висели за окном. Плюс ко всему стало совершенно не нужно ждать окончания выпуска новостей, чтобы узнать прогноз. Вся необходимая информация о температуре воздуха теперь прячется в наших карманах, но порой даже умное устройство на Android дает сбой. У некоторых людей не работает виджет погоды, кто-то жалуется на неправильные сведения или отображение не того города, а иногда приложение показывает устаревшие данные. Все это — проблемы, которые вы запросто решите, прочитав наш материал.
Приложения не всегда показывают точные сведения о погоде
Содержание
- 1 Как вывести погоду на экран
- 2 Почему не обновляется погода
- 3 Почему неправильно показывает погоду
- 4 Как изменить город в Погоде
- 5 Как убрать погоду с экрана
Как вывести погоду на экран
Если ваш телефон не показывает погоду, то в первую очередь нужно скачать специальное приложение для показа температуры воздуха. Мы неоднократно делали подборки подобных программ, поэтому вы наверняка найдете что-нибудь подходящее. Кроме того, приложение погоды должно быть установлено на смартфоне по умолчанию.
⚡ Подпишись на Androidinsider в Дзене, где мы публикуем эксклюзивные материалы
Если вы никогда не пользовались такими программами, то первым делом запустите Погоду, примите условия соглашения, а также дайте разрешение на определение геолокации. Так приложение будет понимать, где вы находитесь, благодаря чему покажет актуальные сведения о температуре воздуха за окном.
Перед размещением виджета не забудьте открыть приложение погоды и дать ему все разрешения
Далее вам нужно добавить погоду на главный экран, чтобы отпала необходимость каждый раз запускать программу. Для этого:
- Задержите палец на свободной области рабочего стола.
- Перейдите в раздел «Виджеты».
- Выберите понравившийся виджет погоды (их может быть несколько).
- Разместите плитку в свободной части экрана.
Погода добавляется на главный экран так же, как и любой другой виджет
Теперь вы всегда будете видеть актуальную погоду, а по нажатию на виджет узнаете подробные сведения о температуре воздуха и прогнозе на следующие дни.
Почему не обновляется погода
К сожалению, даже после правильной настройки у многих людей не обновляется погода. Виджет показывает устаревшие сведения, не отражающие ситуацию за окном. Прежде всего вы должны понимать, что чаще всего не обновляется виджет погоды по причине отсутствия доступа к сети. Поэтому рекомендую прочитать наш текст с инструкцией на случай, если плохо работает интернет на телефоне.
❗ Поделись своим мнением или задай вопрос в нашем телеграм-чате
С подключением к сети все в порядке, но виджет продолжает показывать сведения за прошлый день? Тогда проверьте настройки погоды:
- Откройте настройки телефона.
- Перейдите в раздел «Приложения».
- Выберите программу, отвечающую за отображение погоды.
- Откройте вкладку «Контроль фоновой активности».
- Установите значение «Умный режим» или, если так было по умолчанию, выберите «Без ограничений».
Погода не будет обновляться, если запретить приложению работу в фону
Изменения должны сразу вступить в силу, но для надежности можно перезагрузить смартфон. Все равно не помогает? Тогда очистите данные приложения:
- Откройте настройки погоды.
- Нажмите кнопку «Очистить».
- Подтвердите очистку всех данных.
Сброс данных приложения помогает решить целый ряд проблем
Далее придется снова запустить программу, чтобы выполнить первичную настройку, так как ранее сохраненные данные окажутся стерты. Если положительных изменений не произойдет, установите другое приложение погоды.
Почему неправильно показывает погоду
Бывает и другая ситуация, когда сведения, вроде бы, актуальные, но температура за окном отличается от тех значений, которые мы видим на экране. В этой связи важно сказать несколько слов о точности погоды. Она априори не может быть стопроцентной. Особенно, если вы живете в большом городе, где температура отличается от района к району, или в маленьком населенном пункте без метеорологической станции.
🔥 Загляни в телеграм-канал Сундук Али-Бабы, где мы собрали лучшие товары с АлиЭкспресс
Информация о положении дел за окном зачастую основывается на показаниях пользователей. Так, одной из фишек приложения Яндекс Погода является возможность помочь разработчикам составить более точный прогноз. Но, если пользователь соврет, то это негативным образом скажется на качестве отчета. А еще погода показывает неправильно просто из-за того, что в настройках установлена не та единица измерения:
- Запустите погоду.
- Перейдите в настройки приложения.
- Выберите градус Цельсия в качестве единицы измерения.
Не забывайте, что в наших широтах температура воздуха измеряется в градусах Цельсия
Это не все причины неверной погоды. Также проблема возникает из-за неправильного определения города, когда приложение думает, будто вы находитесь в другом месте, а потому демонстрирует сведения, актуальные для другого населенного пункта.
Как изменить город в Погоде
Основываясь на данных о местоположении, виджет показывает погоду в том месте, где вы находитесь здесь и сейчас. Если заблокировать для него эту функцию, то сведения окажутся неверными. Поэтому обязательно проверьте наличие разрешения на доступ к геолокации:
- Откройте настройки смартфона.
- Отыщите свою Погоду в разделе «Приложения».
- Перейдите во вкладку «Разрешения».
- Убедитесь, что «Местоположение» разрешено.
Чтобы город определялся верно, держите геолокацию включенной
Также вы можете установить город для погоды вручную, сделав несколько простых шагов:
- Запустите приложение.
- Откройте настройки и перейдите в раздел «Место». Если подобного пункта меню нет, нажмите кнопку «+».
- Введите название города, в котором вы находитесь.
- Добавьте населенный пункт.
- Удалите старый город, если информация о погоде в нем уже для вас не актуальна.
Не забудьте установить свой город в качестве основного
Сохранив изменения, вы заметите, что на экране теперь показываются правильные сведения, соответствующие вашей геолокации. Главное — не перепутайте приложение, в котором вы меняли настройки, с виджетом, расположенным на главном экране. Бывает, человек устанавливает две программы для погоды, забывая о том, какая из них находится на рабочем столе.
⚡ Подпишись на Androidinsider в Пульс Mail.ru, чтобы получать новости из мира Андроид первым
Как убрать погоду с экрана
Если вы разочаровались в точности информации, которую показывает телефон, то узнайте, как удалить виджет Погода:
- Задержите палец на виджете.
- Нажмите кнопку «Удалить».
- Если виджет отображается в шторке уведомлений (центре управления), запретите программе отправку оповещений.
Погоду можно удалить с главного экрана, а также убрать из шторки уведомлений
Напоследок советую познакомиться с информацией о том, как удалить приложение Погода. План действий тот же, что и в случае с другими программами, о чем мы рассказывали в отдельном материале.
Если пользователь желает установить погоду на главный экран телефона Андроид, он может сделать это двумя способами. Во-первых, это виджет, встроенный в операционную систему. Если же его возможностей недостаточно, есть ряд более функциональных решений от сторонних разработчиков. Чтобы воспользоваться любым из них, нужно знать, как разместить их на рабочем столе своего мобильного устройства.
Как установить системный виджет погоды на главный экран Андроид
Самый простой способ добавить прогноз погоды на экран смартфона — воспользоваться системным виджетом. Чтобы его установить, необходимо:
- Коснуться пальцем свободного места на рабочем столе и удерживать его, пока внизу не появится меню.
- Кликнуть «Виджеты».
- Выбрать один из нескольких вариантов «Погоды». Они отличаются количеством информации и способами ее отображения.
- Удерживая понравившийся виджет пальцем, переместить его на свободное пространство на экране.
Внимание! В зависимости от бренда и модели смартфона, версии операционной системы и наличия собственной оболочки от производителя меню в нижней части экрана вызывается по-разному. Вместо продолжительного нажатия на свободный участок рабочего стола это может быть «щипок», когда два пальца помещаются на дисплее и синхронно движутся навстречу друг другу.
Сторонние приложения погоды
Если визуальное оформление системного виджета или его возможности не устраивают пользователя, можно скачать любое из сторонних приложений.
Яндекс.Погода
Программа Яндекс.Погода сообщает прогноз на ближайшие дни и часы для любой точки на карте мира благодаря технологии «Метеум». Предлагает следующие возможности:
- установка на рабочем столе или панели уведомлений (системной шторке);
- отображение данных о температуре, влажности воздуха, атмосферном давлении, ветре, осадках;
- прогноз на сегодня, завтра или на ближайшие 7 дней для города, района, станции метро или определенного дома;
- выбор нескольких мест, для которых требуется информация, и быстрое переключение между ними;
- предупреждение о резкой перемене погоды.
После установки приложения от Яндекса виджет автоматически появляется в панели уведомлений. Чтобы разместить его на основном экране, нужно:
- Нажать на рабочий стол пальцем и удерживать, пока внизу не откроется меню. Перейти в «Виджеты».
- Выбрать один из нескольких видов «Яндекс.Погоды» и переместить на свободный участок.
- Откроется меню настройки в приложении. Можно изменить фон и степень его прозрачности, цвет иконок, время обновления, назначить отображение прогноза на несколько дней. После нажатия на кнопку «Установить» информация появится на экране.
При необходимости виджет на системной шторке можно отключить или настроить в меню «Яндекс.Погоды».
AccuWeather
Приложение от одноименного разработчика показывает точный прогноз и оповещает об экстремальных погодных условиях. Прочие возможности:
- отображение реальной и ощущаемой температуры воздуха;
- информирование об осадках, гололеде, влажности, ветре;
- обновление данных в режиме настоящего времени;
- прогноз на сегодня или ближайшие 15 дней.
Чтобы приложение показывало погоду на экране телефона по месту нахождения, нужно:
- Вызвать меню с виджетами.
- Найти AccuWeather и выбрать оптимальный вариант (на черном или белом фоне).
- Переместить на рабочий стол.
- Откроется меню настроек. Можно выбрать местоположение, скругленные углы и прозрачность фона. Затем кликнуть «Создать виджет», чтобы виджет появился в указанном месте.
На экране будут показаны температура (реальная и ощущаемая), прогноз и время обновления информации.
Weather Underground
Популярное приложение от одноименной компании, являющейся первой метеорологической службой в интернете. Достоинства:
- прогноз на 10 дней по суткам и часам;
- отображение реальной и ощущаемой температуры, скорости и направления ветра, влажности, точки росы и видимости;
- интерактивная карта всех персональных погодных станций рядом;
- сохранение в памяти истории поиска и выбранных местоположений;
- вывод данных по здравоохранению: качество воздуха, индекс УФ, вспышки гриппа.
Weather Underground по умолчанию появляется на панели уведомлений. Показывает местоположение, температуру, прогноз. В настройках приложения можно выбрать, какая информация должна быть отображена, а также настроить тему оформления — темную или светлую.
Чтобы видеть информацию о погоде на рабочем столе, нужно:
- Отыскать в меню виджетов Weather Underground и нажать на него.
- В появившемся окне с настройками указать город проживания.
- Выбрать время обновления.
На экране будут показаны сведения о температуре, прогноз, влажность и местоположение.
Прогноз Погоды
«Прогноз погоды на 14 дней» от Meteored — бесплатное приложение от сайта pogoda.com. Возможности:
- почасовой вывод данных о температуре, атмосферном давлении, скорости и направлении ветра, влажности, дожде и снеге, восходе и заходе Солнца, лунных фазах;
- анимированные карты прогноза осадков, скорости и направления ветра, температуры, облачности, атмосферного давления;
- предупреждение об изменениях погоды на завтра;
- возможность поделиться прогнозом через мессенджер или социальную сеть.
На рабочем столе предлагается разместить один из восьми вариантов виджетов, как упрощенных, показывающих только температуру и часы, так и подробных, с прогнозом погоды на ближайшие 7 дней, временем, местоположением, скоростью и направлением ветра и прочими данными. Для установки нужно выбрать понравившийся в меню и поставить на главный экран.
Погода Live
Особенность приложения — яркое и красивое оформление с завораживающей анимацией. Сообщает информацию о погоде на настоящий день или на неделю и определяет:
- реальную (минимальную и максимальную) и ощущаемую температуру;
- направление ветра;
- атмосферное давление;
- осадки;
- видимость на дороге;
- заходы и восходы солнца.
Важно! В бесплатной версии открыт доступ лишь к части инструментов. Чтобы получить полные возможности, потребуется оформить платную подписку. Познакомиться с ними разрешается в пробной версии, чтобы решить, стоит ли покупать премиум-аккаунт.
Погода Live предлагает 9 видов виджетов, как с минимальными данными, так и максимально информативные. Нужно выбрать понравившийся в меню и переместить на свободный участок экрана.
Как правильно настроить работу виджета на телефоне Андроид
Если установленный на рабочем столе виджет не показывает погоду или выводит неверную информацию, нужно включить геолокацию, развернув панель уведомлений. Это позволит программному обеспечению установить местоположение человека и вывести на экран правильные данные.
Если при загрузке приложения пользователь отклонил его запрос на доступ к геопозиции, потребуется включить последний вручную. Для этого нужно:
- Открыть настройки смартфона.
- Перейти в раздел «Приложения», найти интересующее, нажать на него.
- Кликнуть на строку «Разрешения».
- Отыскать «Местоположение» и разрешить к нему доступ.
- При необходимости сохранить изменения.
Внимание! На смартфонах разных брендов, с различными версиями Андроид и в зависимости от наличия оболочек от производителей, действия могут незначительно меняться, но общая последовательность останется такой же.
Теперь виджет должен показывать верную погоду с учетом местоположения человека.
Современные смартфоны – очень полезные устройства, которые могут обеспечить вас всей необходимой информацией. Например, вы без труда можете вывести погоду на главный экран, и всегда будете знать, как одеться, и стоит ли брать с собой зонт. Установить такой виджет на рабочий стол совсем не сложно, а пользоваться им будет очень удобно.
Как добавить погоду на главный экран смартфона с android-прошивкой
Скорее всего, в вашем смартфоне уже есть погодный виджет – его можно найти практически во всех прошивках. Таким образом, все, что требуется сделать – это установить погоду на экран. Для этого нужно зайти в раздел управления виджетами, и сделать это можно несколькими разными способами.
В большинстве прошивок для перехода к управлению виджетами нужно тапнуть по экрану и удерживать палец секунду или две, пока не откроется меню. В этом меню нужно выбрать раздел «Виджеты» или «Приложения и виджеты».
В других прошивках для активации этого меню потребуется провести по экрану двумя пальцами от краев к центру, как бы ущипнув его. Например, этот «щипок» используется в прошивке MIUI на смартфонах Xiaomi.
Третий вариант – отдельная кнопка «Приложения». Выглядит она примерно вот так:
Нажав на нее, вы откроете раздел «Приложения», где можно будет выбрать подраздел «Виджеты».
Открыв меню установки виджетов, поищите погодный. Обычно он выглядит так, что его трудно с чем-то перепутать.
Чтобы установить виджет погоды на главный экран, вам нужно тапнуть по нему и удерживать палец, пока под виджетом не появится рабочий стол.
Теперь, не отпуская палец, нужно переместить виджет на нужное место.
После того, как погодный виджет будет установлен, его нужно настроить, чтобы он показывал актуальный и точный прогноз. Для этого потребуется подключиться к сети и, если определение местоположения отключено, вручную указать город.
Теперь вы всегда сможете узнать текущую погоду, не подходя к окну, а также ознакомиться с прогнозом на ближайшее время.
Если же вдруг вы не нашли погодного виджета в настройках своего смартфона, не спешите отчаиваться, ведь приложение погоды всегда можно бесплатно скачать из Google Play. Откройте магазин приложений и наберите в поиске «погода». Посмотрите скриншоты и выберите то, которое вам больше нравится.
Вместе с приложением будет установлен и виджет, позволяющий вывести прогноз погоды на экран. Теперь вам нужно только зайти в настройки виджетов и установить его на свой рабочий стол.
Некоторые приложения предлагают даже несколько погодных виджетов, так что вы сможете выбрать более компактный или более информативный вариант на свой вкус.



























