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

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

Войти
Регистрация
Восстановить пароль
 
blood73
Сообщений: n/a
#1

Обновление виджета при нажатии на него - Программирование Android

19.06.2012, 20:52. Просмотров 1041. Ответов 0
Метки нет (Все метки)

Добрый вечер. Пытаюсь сделать свой виджет. Суть: выводит картинку с одного интернет-ресурса. Вывод осуществил, но проблема с обновлением при нажатии на него. Пытался уже по-разному - безуспешно. Далее код, здесь обновление пытался осуществить через broadcast, но что-то ничего...

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
package com.lieryan.urlimagewidget;
 
import com.lieryan.urlimagewidget.R;
 
import android.app.Notification;
import android.app.NotificationManager;
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.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
 
public class URLImageAppWidgetProvider extends AppWidgetProvider {
 
    public static String TAG = "Widget";
    //
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
    //
    public static class Size_1_1 extends URLImageAppWidgetProvider {}
    public static class Size_1_2 extends URLImageAppWidgetProvider {}
    public static class Size_2_2 extends URLImageAppWidgetProvider {}
    public static class Size_4_2 extends URLImageAppWidgetProvider {}
    public static class Size_4_3 extends URLImageAppWidgetProvider {}
 
    
    @Override
    public void onReceive(Context context, Intent intent) {
 
         final String action = intent.getAction();
         if (ACTION_WIDGET_RECEIVER.equals(action)) {
            
                        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
                         ComponentName thisAppWidget = new ComponentName(context.getPackageName(), URLImageAppWidgetProvider.class.getName());
                         int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
                         this.onUpdate(context, appWidgetManager, appWidgetIds);
                         
                        
                       
         } 
         super.onReceive(context, intent);
   }
    
    
 
    
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        
        
        SharedPreferences urls = context.getSharedPreferences("urls.conf", Context.MODE_PRIVATE);
        for (int id : appWidgetIds) {
            String url = urls.getString("url_" + id, "");
            update(context, appWidgetManager, id, url);
            
            //
            //Создаем новый RemoteViews
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
            
          //Подготавливаем Intent для Broadcast
            Intent active = new Intent(context, URLImageAppWidgetProvider.class);
            active.setAction(ACTION_WIDGET_RECEIVER);
            active.putExtra("msg", "Запущен!");
            
          //создаем наше событие
            PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
            
          //регистрируем наше событие
            remoteViews.setOnClickPendingIntent(R.id.img, actionPendingIntent); 
            
 
            appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
        }   
 
    }
    
 
 
    
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
        
        SharedPreferences urls = context.getSharedPreferences("urls.conf", Context.MODE_PRIVATE);
        SharedPreferences.Editor urls_editor = urls.edit();
        for (int id : appWidgetIds) {
            urls_editor.remove("url_" + id);
        }
        
        urls_editor.commit();
        
    }
   
  
    public static void update(final Context context, final AppWidgetManager appWidgetManager, final int id, final String url) {
        new Thread() {
            public void run() {
                Bitmap img = getBitmapFromUrl(url);
                if (img != null) {
                    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
                    views.setImageViewBitmap(R.id.img, img);
                    appWidgetManager.updateAppWidget(id, views);    
                }
            }
        }.start();
        
                
    }
    
    private static Bitmap getBitmapFromUrl(final String url) {
        try {
            return BitmapFactory.decodeStream(((java.io.InputStream)new java.net.URL(url).getContent()));
        } catch (Exception e) {
            return null;
        }
        
    }
}
Что я сделал не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 20:52     Обновление виджета при нажатии на него
Посмотрите здесь:

Обновление данных Activity при нажатии на кнопку - Программирование Android
Приветствую всех. Проблема такая: необходимо обновлять данные(ImageView, TextView и т.п.) в Activity при нажатии на кнопку. Создаю...

Ошибка при создании виджета - Программирование Android
Доброго времени суток! При создании виджета всегда вылетает одна и та же ошибка, подскажите пожалуйста в чем проблема: MainActivity ...

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

Открытие диалога при удалении виджета с рабочего стола - Программирование Android
Как открыть диалог при клике по виджету я умею, нашел пример. Там делается так Intent intent = new Intent(context, InputDialog.class);...

Ошибка при нажатии - Программирование Android
делаю приложение по урокам http://dajver.blogspot.com/2012/01/android-4-ontouchevent.html GameView.java public class GameView...

Не прокручивать ListView при добавлении в него данных - Программирование Android
Добрый день! Подскажите пожалуйста. Делаю программу. В ней есть функционал на подобии чата. Т.е. новые сообщения снизу, старые...

Ошибка при нажатии на кнопку - Программирование Android
package ru.test.gthen; import android.app.*; import android.os.*; import android.view.*; import android.widget.*; import...

Действие при нажатии на ссылку - Программирование Android
Есть TextView, в тексте содержится ссылка. Как сделать, чтоб при нажатии на ссылку происходило какое-то действие (не переход по адресу или...

Вылет при нажатии кнопки - Программирование Android
Доброго времени суток. Опять непонятная ошибка, при нажатии кнопки приложение вылетает. Вот ошибка: java.lang.IllegalStateException:...

Считывание чисел при нажатии на кнопки - Программирование Android
Здравствуйте . Пишу калькулятор под Android на Java . На экране есть кнопки 0-9 , + , - , * , / и запятая . Пользователь набирает цифры ,...

Exception при нажатии любых кнопок - Программирование Android
Я выставил листенер самим правильным образом - через xml, но при нажатии вылетает ошибка: 02-14 21:55:09.355: ERROR/AndroidRuntime(974):...

Изменение backgraund color при нажатии - Программирование Android
Есть TextView. При нажатии на текст (ссылка) в нём, меняю через селектор цвет текста. <?xml version="1.0" encoding="utf-8"?> <selector...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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