Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,486
#1

Widget не работает OnUpdate - Программирование Android

16.06.2014, 10:42. Просмотров 1314. Ответов 7
Метки нет (Все метки)

собственно в OnResive вижу получение события APPWIDGET_UPDATE,
однако Log.w("OnUpdate", "Do"); // !!!!!!----!!!!!!
не вызывается ни разу
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
public class InvoiceWidget extends AppWidgetProvider {
 
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        Log.w("OnUpdate", "Do"); //   !!!!!!----!!!!!!
        try {
            /*
            There may be multiple widgets active, so update all of them
            Get all ids
            */
            ComponentName thisWidget = new ComponentName(context,
                    InvoiceWidget.class);
            int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
            for (int appWidgetId : allWidgetIds) {
// Register an onClickListener
 
                Intent intent = new Intent(context, InvoiceWidget.class);
 
                intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
 
                PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                        0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                RemoteViews views;
                views = new RemoteViews(context.getPackageName(), ru.newwidget.app.R.layout.lay_w);
 
                views.setOnClickPendingIntent(ru.newwidget.app.R.id.btRef, pendingIntent);
 
                new GetCount(context, appWidgetManager, appWidgetId).execute();
 
                views.setTextViewText(ru.newwidget.app.R.id.btRef, "NewText");
                // Instruct the widget manager to update the widget
                appWidgetManager.updateAppWidget(appWidgetId, views);
            }
        }
        catch (Exception e)
        {
            Log.e("Error", e.getMessage());
        }
 
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.w("Action", intent.getAction().toString());
    }
    @Override
    public void onEnabled(Context context) {
        // Enter relevant functionality for when the first widget is created
        Log.w("onEnabled", "Do");
    }
 
    @Override
    public void onDisabled(Context context) {
        // Enter relevant functionality for when the last widget is disabled
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.newwidget.app">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:label="@string/app_name"
        android:theme = "@style/AppTheme">
        <receiver android:name="ru.newwidget.app.InvoiceWidget" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/wi" />
        </receiver>
    </application>
</manifest>

http://www.cyberforum.ru/android-dev/thread1546669.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2014, 10:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Widget не работает OnUpdate (Программирование Android):

Widget + activity
Добрый день!!! Создаю простенький виджет-диктофон и кнопка для открытия...

Custom Fonts in widget
Столкнулся с такой проблемой, что не могу сделать шрифт для виджета в...

Widget и статические данные
Всем привет! Столкнулся со следующим. Имеется класс виджета и в нем...

Файл не найден: Widget.obj
Всем привет! В Qt creator создал приложение Qt Widget. При сборке проекта...

Custom Google Maps Widget ?
Привет! Пытаюсь понять, на сколько реально реализовать на картах Гугл v.2...

7
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
17.06.2014, 00:14 #2
onReceive - срабатывает на все.
onUpdate() — вызывается при каждом обновлении виджета. Т.е. если вы принудительно его не обновите, то минимум каждые 30 минут. Указывается в файле провайдера виджета.
0
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,486
17.06.2014, 19:04  [ТС] #3
dubok79, в том-то и дело, что в OnResive я вижу получение события APPWIDGET_UPDATE.

Однако появление этого события не вызывает метода OnUpdate!!!

Добавлено через 39 секунд
P.S. для теста поставил обновление на 10 секунд.
0
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
18.06.2014, 13:29 #4
А как вы обновляете? У меня несколько приложений с виджетами - проблем не было. Высылайте свой проект, посмотрю.
0
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,486
18.06.2014, 17:22  [ТС] #5
вот отправляю весь проект
0
Вложения
Тип файла: zip NewWidget.zip (1.90 Мб, 6 просмотров)
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
18.06.2014, 18:13 #6
Что то у меня не получается импортировать проект. Импортируется 3 разных проекта. Поди я что-то не то делаю?
0
Learx
1045 / 852 / 194
Регистрация: 31.03.2010
Сообщений: 2,486
19.06.2014, 11:56  [ТС] #7
dubok79, очень странно,я отправил папку только одного проекта.
после MS VS работа в AndroidStudio кажется каким-то шаманством. Сделал, как понял, но что-то понял не так, а что - не могу понять.
а вообще необходим виджет, который обновляет текст на кнопке при клике по ней.
Самый прикол в том, что написал - работал. а потом не пойми чего вдруг перестал работать.
Возможно, из-за нового проекта(ведь вы видите почему-то три проекта)....
0
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
19.06.2014, 14:48 #8
Лучший ответ Сообщение было отмечено Learx как решение

Решение

Честно говоря странный проект. Еле еле нашел где хранится манифест. Вроде все верно написано. Но не смог найти где обработка нажатия кнопки. android:updatePeriodMillis="10000" - бесполезно писать т.к. минимальное значение 1800000 - т.е. 30 минут. Обновлять нужно принудительно, примерно так:
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
    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        final String action = intent.getAction();
        if (action.equalsIgnoreCase(BTN_WIDGET_UPDATE)){
            Uri data = intent.getData();
            int mAppWidgetId = Integer.parseInt(data.getLastPathSegment());
 
            AppWidgetManager AWM = AppWidgetManager.getInstance(context);
            updateAppWidget(context, AWM, mAppWidgetId);
            AWM = null;
        }
    }
 
@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
            updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
    }
 
    public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
        Intent iBtn = new Intent(context, WidgetActivity_1x1.class);
        iBtn.setAction(BTN_WIDGET_UPDATE);
        iBtn.setData(data);
        PendingIntent piBtnUpd = PendingIntent.getBroadcast(context, 0, iBtn, 0);
        updateViews.setOnClickPendingIntent(R.id.ivBtnUpd, piBtnUpd);
        }
Т.е. при формировании виджета на элемент виджета ivBtnUpd (картинка в данном случае) устанавливается интент. При нажатии генерируется onReceive, где фильтруется определенный Action и вызывается метод обновления. А сам onUpdate будет вызываться системой когда ей захочется (ресурсы освободились, рабочий стол обновился и т.д.), но не реже 1 раз в час.

Может где неверно говорю, но смысл такой.
1
19.06.2014, 14:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 14:48
Привет! Вот еще темы с решениями:

Android.support.v7.widget.GridLayout
Друзья, помогите пожалуйста! Никак не получается включить GridLayout в макет из...

Home Screen Widget Animation
Добрый день, пишу виджет на который выводится некий текст, раз в 10 секунд он...

Получение String из другого класса в Activity widget
Хей, гайз! Проблема такова: как передавать String между классами я и так знаю,...

Unknown member align_normal of android.widget.gridlayout.alignment
Подскажите почему ALIGN_NORMAL подчеркивается красным? Здесь мой канвас ...


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

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

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