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

Как сделать ежесекундное обновление виджета? - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Вызов диалога с ожиданием реакции - мьютекс лочит UI поток http://www.cyberforum.ru/android-dev/thread1374162.html
Необходимо решить классическую задачу - вызвать диалог, дождаться действия пользователя и на их основе сделать что-то. Естественно нужно это все сделать выполнив останов главного потока не затронув UI поток. Решение взял такое. Из активности вызывается функция вспомогательного класса, который сформировав первый асинхронный поток, вызывает из другого класса конструктор диалога который в свою...
Программирование Android Не могу установить Android Studio Я использую Ubuntu 14.04 LTS. Мой JDK версии 1.8.0_31. Я скачал архив Android Studio, распаковал его и запустил файл studio.sh. Но каждый раз, когда начинается установка, происходит следующая ошибка: Refresh Sources: Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: File not found Fetched Add-ons List successfully Refresh Sources Failed to fetch... http://www.cyberforum.ru/android-dev/thread1374132.html
Считывание записанных данных из SQLite Программирование Android
Помогите пожалуйста,столкнулся вот с такой проблемой.У меня есть программа написанная под Андрой,в ней 3 основных класса.1-ый Это класс DBHelper где я создаю мою БД и таблицу "regtable" с определёнными полями.Этот класс приведён ниже. class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { // конструктор суперкласса super(context, "myDB", null, 1); ...
Почему вызывается onDismiss Программирование Android
Привет. У меня есть DialogFragment, который вызывается в главной активности. Когда я меняю ориентацию экрана (диалог открыт), мне нужно обновить поток, но почему диалог в конце вызывает onDismiss?
Программирование Android Онлайн воспроизведение Android_Player в Android studio http://www.cyberforum.ru/android-dev/thread1373780.html
Ребят! Помогите пожалуйста! Не могу сделать воспроизведение музыки онлайн( уже все перепробовала.. в приложении выводится текст сначала,а потом снизу две кнопки, Play и stop. после прочтения текста можно будет прослушать этот текст онлайн. но у меня не воспроизводит(( Ребят помогите пожалуйста. очень нужно:( import android.media.AudioManager; import android.os.Bundle; ...
Программирование Android Как загружать/хранить файл в SQLite? Есть список, нужно по клику на айтеме открывать текстовый файл или картинку, и вопрос стоит в том как их доблять к определенному айтему с сохранением в SQLite (ну т.е. добавил файл и когда надо открыл), ну или как это вообще делается? 1. какой принцип? 2. какой примерно код должен быть на кнопке выбора файла? 3. как этот файл или его путь должен и сохраняться в sqlite или ресурсах? ... подробнее

Показать сообщение отдельно
Krock21rus
74 / 74 / 19
Регистрация: 18.11.2013
Сообщений: 373
Завершенные тесты: 2

Как сделать ежесекундное обновление виджета? - Программирование Android

13.02.2015, 16:40. Просмотров 646. Ответов 0
Метки (Все метки)

Здравствуйте, делаю виджет на подобии часов, он должен каждую секунду менять значения в своих textview.

Я пересмотрел всё, и русскоязычные, и англоязычные гайды, пытался делать бесконечный цикл с задержкой в секунду, но виджет работал только на эмуляторе genymotion android 4.4.4(SGS5), в случае с бесконечным циклом начинал работать непонятно когда, а в последней версии работает вроде сразу, но на телефоне, сколько не жди, не выходит текст.
вот код моей последней попытки:
MyWidget.java
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.example.myapplication4.app;
 
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
import android.app.PendingIntent;
import android.app.AlarmManager;
 
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
 
public class MyWidget extends AppWidgetProvider {
    final String UPDATE_ALL_WIDGETS = "update_all_widgets";
    @Override
    public void onEnabled(Context context) {
        super.onEnabled(context);
        Intent intent = new Intent(context, MyWidget.class);
        intent.setAction(UPDATE_ALL_WIDGETS);
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),
                1000, pIntent);
    }
 
    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        Intent intent = new Intent(context, MyWidget.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);
    }
 
    @Override
    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);
            }
        }
    }
 
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                         int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
 
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
    }
    static void updateWidget(Context context, AppWidgetManager appWidgetManager, int widgetID) {
        try {
                RemoteViews widgetView = new RemoteViews(context.getPackageName(), R.layout.widget);
                widgetView.setTextViewText(R.id.tv1, getPeriod().getName());
                final String result;
                if (getPeriod().getEnd() - getMinutes() < 0)
                    result = "осталось " + (getPeriod().getEnd() + 1440 - getMinutes()) + "." + (60 - new GregorianCalendar().get(Calendar.SECOND)) + " минут";
                else
                    result = "осталось " + (getPeriod().getEnd() - getMinutes()) + "." + (60 - new GregorianCalendar().get(Calendar.SECOND)) + " минут";
                widgetView.setTextViewText(R.id.tv2, result);
                appWidgetManager.updateAppWidget(widgetID, widgetView);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    static class Period {
        private String name;
        private int start;
        private int end;
 
        public Period(String name, int start, int end) {
            this.name = name;
            this.start = start;
            this.end = end;
        }
        public String getName()
        {
            return this.name;
        }
        public int getStart()
        {
            return this.start;
        }
        public int getEnd()
        {
            return this.end;
        }
    }
 
    static public int getMinutes() {
        Calendar a = new GregorianCalendar();
        a.setTime(new Date(System.currentTimeMillis()));
        return a.get(Calendar.HOUR_OF_DAY)*60+a.get(Calendar.MINUTE);
    }
    static public Period getPeriod() {
        Period[] Periods = new Period[] {
                new Period("1ый урок", 480, 520), // 8.00 8.40
                new Period("1ая перемена", 520, 525), // 8.40 8.45
                new Period("2ой урок", 525, 565), // 8.45 9.25
                new Period("2ая перемена", 565, 575), // 9.25 9.35
                new Period("3ий урок", 575, 615), // 9.35 10.15
                new Period("3я перемена", 615, 630), // 10.15 10.30
                new Period("4ый урок", 630, 670), // 10.30 11.10
                new Period("4ая перемена", 670, 685), // 11.10 11.25
                new Period("5ый урок", 685, 725), // 11.25 12.05
                new Period("5ая перемена", 725, 745), // 12.05 12.25
                new Period("6ой урок", 745, 785), // 12.25 13.05
                new Period("6ая перемена", 785, 800), // 13.05 13.20
                new Period("7ой урок", 800, 840), // 13.20 14.00
                new Period("7ая перемена", 840, 850), // 14.00 14.10
                new Period("8ой урок", 850, 890), // 14.10 14.50м
                new Period("8ая перемена", 890, 900), // 14.50 15.00
                new Period("9ый урок", 900, 940), // 15.00 15.40
                new Period("9ая перемена", 940, 945), // 15.40 15.45
                new Period("10ый урок", 945, 985), // 15.45 16.25
        };
        for (int i = 0; i < Periods.length; i++) {
            if (Periods[i].getStart() <= getMinutes() && Periods[i].getEnd() > getMinutes())
                return Periods[i];
        }
        return new Period("Свободное время", Periods[Periods.length - 1].getEnd(), Periods[0].getStart());
    }
}
layout/widget.xml
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    <TextView
            android:id="@+id/tv1"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#6600ff00"
            android:gravity="center_horizontal"
            android:textColor="#000"
            android:textSize="18sp">
    </TextView>
    <TextView
            android:id="@+id/tv2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal"
            android:textColor="#000"
            android:textSize="18sp"
            android:layout_below="@+id/tv1" android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" android:background="#6600ff00">
    </TextView>
</RelativeLayout>
xml/widget_metadata.xml
XML
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
<appwidget-provider
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/widget"
        android:minHeight="40dp"
        android:minWidth="250dp"
        android:updatePeriodMillis="0">
 
AndroidManifest.xml
[XML]<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication4.app">
 
    <application android:allowBackup="true"
        android:label="@string/app_name"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme">
        <receiver
                android:name="MyWidget">
            <intent-filter>
                <action
                        android:name="android.appwidget.action.APPWIDGET_UPDATE">
                </action>
            </intent-filter>
            <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/widget_metadata"
                    android:widgetCategory="home_screen|keyguard"
                    android:resizeMode="horizontal|vertical">
            </meta-data>
        </receiver>
    </application>
 
</manifest>
аналогичное приложение(не виджет) я создал, с бесконечным циклом, и оно на телефоне прекрасно работает.
</appwidget-provider>[/XML]
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru