Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
#1

Timer и AppWidgetProvider - Программирование Android

03.01.2014, 15:31. Просмотров 984. Ответов 2
Метки нет (Все метки)

С Новым Годом, господа! Успехов всем в Новом Году!
А мой вопрос такой: как остановить таймер в виджете... код в архиве...
Вложения
Тип файла: rar MyWidget.rar (1.44 Мб, 18 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2014, 15:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Timer и AppWidgetProvider (Программирование Android):

Использование RemoteViews в AppWidgetProvider - Программирование Android
Добрый вечер. Ребята как использовать (RecyclerView,findViewById) в public class AppWidget extends AppWidgetProvider { ...

Timer - Программирование Android
Я пишу приложение.Сначала для красоты показывается прогресс бар.Потом через 3сек меняется сообщение.но меняется только без таймера.а с...

Обращение к UI из Timer - Программирование Android
при помощи какой функции из таймера можно обратиться к элементу UI??

Timer \ Intent - Программирование Android
Доброй ночи. При запуске StartActivity через 3 сек должно открыться MainActivity, оно то работает , но только один раз при перезапуске...

Timer в ListView - Программирование Android
Добрый вечер! Поставлена задача: нужно создать ListView в элементах которого тикало время от даты создания объекта. Я пошел по самому...

Handler timer - Программирование Android
Добрый вечер. С помощью какого метода в Handler http://developer.android.com/reference/android/os/Handler.html(беда пока с английским) ,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
04.01.2014, 07:55  [ТС] #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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.example.mywidget;
 
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
 
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
 
public class MyWidget extends AppWidgetProvider {
 
    final String LOG_TAG = "myLogs";
    public static String action_b1 = "b1";
    public static String action_b2 = "b2";
    
    Reminder s; 
 
    @Override
    public void onEnabled(Context context) {
        super.onEnabled(context);
        Log.d(LOG_TAG, "onEnabled");
    }
 
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);        
        Log.d(LOG_TAG, "onUpdate " + Arrays.toString(appWidgetIds));
 
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
 
        //кнопка 1
        Intent b1 = new Intent(context, MyWidget.class);
        b1.setAction(action_b1);
        PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, b1, 0);
        remoteViews.setOnClickPendingIntent(R.id.button1, actionPendingIntent);
 
        //кнопка 2
        Intent b2 = new Intent(context, MyWidget.class);
        b2.setAction(action_b2);
        PendingIntent PendingIntent_btnStopRecord = PendingIntent.getBroadcast(context, 0, b2, 0);
        remoteViews.setOnClickPendingIntent(R.id.button2, PendingIntent_btnStopRecord);
 
        //обновляем виджет
        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    }
    
    public class Reminder {
        Timer timer;
        Context _context;
        int elapsedTime = 0;
 
        public Reminder (final Context context, int seconds) {
            _context = context;
            timer = new Timer();
            timer.schedule(new RemindTask(), 0, seconds);
        }
 
        class RemindTask extends TimerTask {
            private Handler mHandler = new Handler();
            
            @Override
            public void run() {
                mHandler.post(new Runnable() {          
                    @Override
                    public void run() {
                        RemoteViews remoteViews = new RemoteViews(_context.getPackageName(), R.layout.widget);
                        remoteViews.setTextViewText(R.id.button1, String.valueOf(elapsedTime));
                        UpdateGUI(_context, remoteViews);
                        elapsedTime += 1;
                    }
                });
            }
        }
        
        public void stoptimer() {
            timer.cancel();
        }
    }
    
    @Override
    public void onReceive(final Context context, Intent intent) {
        final String action = intent.getAction();
        if (action_b1.equals(action)) {
            Toast.makeText(context, "Таймер создан", Toast.LENGTH_SHORT).show();
            s = new Reminder(context, 1000);
        }
        
        if (action_b2.equals(action)) {
            Toast.makeText(context, "Остановка таймера", Toast.LENGTH_SHORT).show();
 
            s.stoptimer(); //!!!! тут возникает ошибка //как остановить таймер?
        }
        super.onReceive(context, intent);
    }
    
    public void UpdateGUI(Context context, RemoteViews remoteViews) {   
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        ComponentName thisWidget = new ComponentName(context, MyWidget.class);
        manager.updateAppWidget(thisWidget, remoteViews);
    }
    
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
        Log.d(LOG_TAG, "onDeleted " + Arrays.toString(appWidgetIds));
    }
 
    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        Log.d(LOG_TAG, "onDisabled");
    }
 
}
В onReceive хочу отключить таймер, но возникает ошибка... нид хэлп

Добавлено через 16 часов 4 минуты
ошибка возникает в 99 строке
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
04.01.2014, 11:43 #3
Замените строчку номер 24:
Java
1
Reminder s;
на строчку
Java
1
static Reminder s;
и всё заработает.
p.s. это было моё первое знакомство с виджетами, возможно есть другой (более красивый и правильный) способ решить эту проблему
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2014, 11:43
Привет! Вот еще темы с ответами:

Timer и TimerTask - Программирование Android
Пишу программу для андроида в eclipse. Столкнулся с такой проблемой: нужно чтобы после нажатия на картинку она через секунду сменилась на...

CheckBox и Timer - Программирование Android
Здравствуйте. Я только недавно начала изучать программирование. Помогите пожалуйста. Есть CheckBox1 и CheckBox2. Есть editText1 в...

timer или postdelayed - Программирование Android
Мне во время работы приложения в фоновом, да и не только, нужно раз в секунду узнать сколько время. hh =...

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


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

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

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