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

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

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

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

19.06.2012, 20:52. Просмотров 1007. Ответов 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     Обновление виджета при нажатии на него
Посмотрите здесь:

Как при обновлении виджета получить настройки и применить их Android
Android Ошибка при создании виджета
Android Действие при нажатии на ссылку
Android Обновление данных Activity при нажатии на кнопку
Android ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии?
Android Как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка?
Android Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Вылет при нажатии кнопки Android
Не прокручивать ListView при добавлении в него данных Android
Android Открытие диалога при удалении виджета с рабочего стола
Android Ошибка при нажатии
Android Ошибка при нажатии на кнопку

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

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

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