С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Merenga
0 / 0 / 0
Регистрация: 24.08.2014
Сообщений: 5
#1

Виджет с часами - Программирование Android

24.08.2014, 18:21. Просмотров 1127. Ответов 4
Метки нет (Все метки)

Пишу виджет, который показывает время. Запускаю часы на эмуляторе (Android 4.0.3) работает без отказно, запускаю на телефоне (Android 4.4.2) работает пару минут и время замерзает. И да почему-то, если вытащить второй экземпляр виджета на нем также, время стоит.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.mereng.widgetclock;
 
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
 
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.widget.RemoteViews;
import android.widget.Toast;
 
public class WidgetClock extends AppWidgetProvider {
    
    int [] mAppWidgetIds;
    AppWidgetManager widgetManager;
    static Timer timer = null;
    
    public void update(Context context)
    {
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
        Date dt = new Date();
        SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
        views.setTextViewText(R.id.tv, format.format(dt));
        widgetManager.updateAppWidget(mAppWidgetIds, views);
    }
    
    public void onDeleted(Context context, int[] appWidgetIds)
    {
        Toast.makeText(context, "Удален", Toast.LENGTH_LONG).show();
        timer.cancel();
        timer = null;
    }
    
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
    {
        mAppWidgetIds = new int[appWidgetIds.length];
        
        for(int i = 0; i < appWidgetIds.length; i++)
            mAppWidgetIds[i] = appWidgetIds[i];
        widgetManager = appWidgetManager;
        
        update(context);
        
        if(timer == null)
        {
            Toast.makeText(context, "Установка", Toast.LENGTH_SHORT).show();
            timer = new Timer();
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.SECOND, 1);
            cal.set(Calendar.MILLISECOND, 0);
            
            timer.scheduleAtFixedRate(new MyTime(context, this), cal.getTime(), 1000);
        }
    }
    
    private class MyTime extends TimerTask
    {
        AppWidgetManager appWidgetManager;
        WidgetClock parent;
        Context context;
        
        public MyTime(Context context, WidgetClock parent)
        {
            this.parent = parent;
            this.context = context;
        }
 
        @Override
        public void run() 
        {
            // TODO Auto-generated method stub
            try 
            {
                parent.update(context);             
            } catch (Exception e) 
            {
                // TODO: handle exception
                Toast.makeText(context, "Ошибка: " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
        
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2014, 18:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Виджет с часами (Программирование Android):

Виджет - Программирование Android
на активити виджета у меня есть один textviews, я хочу программно изменить текст этого компонета, но этого не происходит когда я виджет...

Виджет приложения - Программирование Android
Здравствуйте. Скажите, пожалуйста, как добавить к приложению виджет? Чтобы при установке приложения ставился и виджет, который можно...

Посоветуйте виджет - Программирование Android
Привет ребята! Каждая девушка хочет иметь гламурную плюшку:) Не факт что плюшка должна быть функциональной, но факт что очень...

Найти виджет по изображению - Программирование Android
А если допустим у меня есть картинка(изображение) где размещен какой то виджет, но я не знаю как он называется, потому что в первый раз его...

Угадать виджет по рисунку - Программирование Android
Добрый день! Как называется данный элемент (выделено стрелкой)? И есть ли он в стандартных элементах?

Обработка нажатий на виджет - Программирование Android
Почему не работает при нажатии на виджет? @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int...

4
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2014, 20:19 #2
перечитайте теорию http://startandroid.ru/ru/uroki/vse-uroki-spiskom
Уроки с 118-122
0
Merenga
0 / 0 / 0
Регистрация: 24.08.2014
Сообщений: 5
24.08.2014, 21:47  [ТС] #3
Tester64, Окей, вот эта реализация уже позволяет вытаскивать больше экземпляров, но на телефоне у меня она так же на две минуты, потом время замерзает, а на эмуляторе все хорошо.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
final String UPDATE_ALL_WIDGETS = "update_all_widgets";
    
    @Override
    public void onEnabled(Context context)
    {
        super.onEnabled(context);
        Intent intent = new Intent(context, WidgetClock.class);
        intent.setAction(UPDATE_ALL_WIDGETS);
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager aManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        aManager.setRepeating(aManager.RTC, System.currentTimeMillis(), 1000, pIntent);
    }
    
    public void onDisabled(Context context)
    {
        super.onDisabled(context);
        Intent intent = new Intent(context, WidgetClock.class);
        intent.setAction(UPDATE_ALL_WIDGETS);
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(pIntent);
    }
    
    public void onReceive(Context context, Intent intent)
    {
        super.onReceive(context, intent);
        if(intent.getAction().equalsIgnoreCase(UPDATE_ALL_WIDGETS))
        {
            ComponentName thisAppWidget = new ComponentName(context.getPackageName(), getClass().getName());
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
            int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget);
            for(int appWidgetID: ids)
                updateWidget(context, appWidgetManager, appWidgetID);
        }
    }
    
    public void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetID)
    {
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
        Date dt = new Date();
        SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
        views.setTextViewText(R.id.tv, format.format(dt));
        appWidgetManager.updateAppWidget(appWidgetID, views);
    }
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.08.2014, 21:58 #4
я от виджетов (временно?) отказался. Ресурсов много (моих и процессорных) - пользы мало (задвинул на соседний экран, накрыл другой программой). И уже год не использую. Но... насколько помню в примерах от гугла были неплохие примеры для новичка - попробуйте разобрать их! Мне когда-то помогло..
1
Merenga
0 / 0 / 0
Регистрация: 24.08.2014
Сообщений: 5
24.08.2014, 22:45  [ТС] #5
Tester64, Просто не понятно, вроде все отлично, но чего адроид останавливает виджет, чего не так. На эмуляторе все гладко работает

Добавлено через 25 минут
Все с проблемой справился, вторая реализация правильная. Это я просто в скомпилированных файлах запутался.
0
24.08.2014, 22:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2014, 22:45
Привет! Вот еще темы с ответами:

Виджет Android 4.1 не появляется в списке - Программирование Android
Добрый вечер, уважаемые форумчане. Учусь создавать приложения для андройда, добрался до виджетов. В уроке размещенном на сайте...

Виджет не появляется в списке виджетов - Программирование Android
Разбираю урок 117 проекта startandroid, делаю все как в уроке, но виджет не появляется в списке. Мне кажется, дело в том, что у меня в...

Виджет детальной информации в андроид - Программирование Android
Вот например у меня есть список городов во фрагменте(в списке пункт - город). И я хочу следующее чтобы по нажатии на этот пункт...

Размер картинки под виджет - Программирование Android
В виджете только ImageButton, какой должен быть размер картинки, чтобы она была в квадрате 1х1 (нормально помещалась, полностью, и была...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.