Skocz do zawartości
Lucass

Widget - konfiguracja i obsługa onClick

    Rekomendowane odpowiedzi

    Lucass

    Witajcie,

    męczę się i kombinuję na wszelkie możliwe sposoby ale nie mogę znaleźć rozwiązania. Zapewne dlatego, że jestem w temacie bardzo świeży, więc proszę o pomoc:

    tworzę widgeta, jego zadaniem jest pobieranie z www aktualnego kursy waluty i odświeżanie go co jakiśtam czas. W danym momencie pobiera kurs franka. Tu jest ok.

    Dodałem do niego ekran konfiguracyjny pokazujący się przy dodaniu widgeta na ekran. I tu pojawiają się schody.

    1. Chciałbym z poziomu ekranu konfiguracyjnego ustawić częstość aktualizacji. Próbowałem przekazać wartość przy pomocy SharedPreferences, ale narazie bezskutecznie:(

    (dla testu kombinuję tak: w funkcji updateWidget pobieram z SharedPreferences-tekst wartość string, zamieniam ją na int przekazując do zmiennej czas, która jest w funkcji onUpdate pobierana do

    timer.scheduleAtFixedRate jako częstotliwość odświeżania. Nic nie wychodzi-czuję, że źle kombinuję. Próbowałem użyć timer.scheduleAtFixedRate w updateWidget, ale wyskakują błędy więc chyba nie tędy droga...)

    2. Kolejny problem to zmiana wyświetlanego kursu - tzn. w konfiguracji wybieram euro więc podmieniam adres strony i ładuję kurs euro - tyle, że nie udaje mi się połączyć wyboru z funkcją realizowaną przy updatowaniu. - wydaje mi się problem wtórny do 1. - Jak znajde rozwiązanie 1. to chyba da się je tu zastosować?

    3. Podajcie mi proszę jakąś wskazówkę - jak uruchomić kliknięciem na widgeta nowy ekran (activity).

    kod Walty.java:

    package moje.walutywidget;
    
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.ComponentName;
    import android.content.Context;
    import android.graphics.Typeface;
    import android.widget.RemoteViews;
    import android.widget.TextView;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Timer;
    import java.util.TimerTask;
    import android.graphics.Color;
    import java.util.Calendar;
    import android.content.Intent;
    import java.lang.Object;
    import android.app.PendingIntent;
    import android.content.SharedPreferences;
    
    public class Waluty extends AppWidgetProvider {
    
       	static RemoteViews remoteViews;
       	private AppWidgetManager appWidgetManager;
       	public static int czas=10000;
    
       	public static String stringWww="http://www.kursfranka.net";
    
       	public static void updateWidget(Context context, AppWidgetManager appWidgetManager, int mAppWidgetId){
    
               SharedPreferences config = context.getSharedPreferences(WidgetConfigure.PREFS_NAME, 0);
               String tekst = config.getString("tekst", "");
               czas=Integer.valueOf(tekst);
    
    
               remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
               remoteViews.setTextViewText(R.id.widget_textview,tekst);
    
               appWidgetManager.updateAppWidget(mAppWidgetId, remoteViews);
    
           }
    
       	@Override
           public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    
       		Timer timer = new Timer();          
       		timer.scheduleAtFixedRate(new KursyWalut(context, appWidgetManager),100, czas);
           }
           private class KursyWalut extends TimerTask{
    
               RemoteViews remoteViews;
               ComponentName thisWidget;
               AppWidgetManager appWidgetManager;            
    
               public KursyWalut(Context context,AppWidgetManager appWidgetManager){
                   this.appWidgetManager = appWidgetManager;
                   remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
                   thisWidget = new ComponentName(context, Waluty.class);
               }
    
               @Override
               public void run(){
    
                   String tresc = null;
                   CharSequence kurstxt ="---";
    
                   try {
                   		URL url = new URL(stringWww);
                   		URLConnection urlConnection = url.openConnection();
    
                   		InputStream inputStream = urlConnection.getInputStream();
                   	   InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                   	   BufferedReader reader = new BufferedReader(inputStreamReader);
    
                   	   StringBuffer stringBuffer = new StringBuffer();
    
                   	   while((tresc = reader.readLine()) != null){
                   	    stringBuffer.append(tresc + "\n");
                   	   }
                   	   inputStream.close(); 
    
                   	   tresc = stringBuffer.toString();
    
    
                   	   kurstxt= tresc.subSequence(tresc.indexOf("(CHF)  =")+8,tresc.indexOf("złotego (PLN)</h2>"));  
                          Calendar rightNow = Calendar.getInstance();
                          int godzina = rightNow.get(Calendar.HOUR_OF_DAY);
                          int minuta = rightNow.get(Calendar.MINUTE);
                          int sekunda = rightNow.get(Calendar.SECOND);
    
                          String godzinaTxt = Integer.toString(godzina);
                          String minutaTxt = Integer.toString(minuta);
                          String sekundaTxt = Integer.toString(sekunda);
    
                            remoteViews.setTextViewText(R.id.kurs_textview, kurstxt);
    
                            remoteViews.setTextViewText(R.id.aktualizacja_textview, "aktualizacja:" + godzinaTxt + ":" +minutaTxt + ":" + sekundaTxt);
                   }
                   catch (MalformedURLException e) {
                   	   e.printStackTrace();
                   	  } 
                   catch (IOException e) {
                   	   e.printStackTrace();
                   	  }  
    
                   appWidgetManager.updateAppWidget(thisWidget, remoteViews);
               }
           }
    
           @Override
           public void onDeleted(Context context, int[] appWidgetIds) {
    
               SharedPreferences config = context.getSharedPreferences(WidgetConfigure.PREFS_NAME, 0);
               SharedPreferences.Editor configEditor = config.edit();
    
               configEditor.remove("tekst");
               configEditor.commit();
    
               super.onDeleted(context, appWidgetIds);
           }
       }

    poniżej kod WidgetConfigure.java

    package moje.walutywidget;
    
    import android.app.Activity;
    import android.appwidget.AppWidgetManager;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class WidgetConfigure extends Activity {
    
       public static final String PREFS_NAME = "WidgetConfigure";
       private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    
       EditText jakisTekst;
       Button jakisPrzycisk;
       AppWidgetManager mAppWidgetManager;
    
       @Override
       public void onCreate(Bundle icicle) {
           super.onCreate(icicle);
    
           setResult(RESULT_CANCELED);
           setContentView(R.layout.config);
    
           jakisTekst = (EditText) findViewById(R.id.tekst);
           jakisPrzycisk = (Button) findViewById(R.id.save_button);
    
           Intent intent = getIntent();
           Bundle extras = intent.getExtras();
           if (extras != null) {
               mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
                       AppWidgetManager.INVALID_APPWIDGET_ID);
           }
    
            if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
               finish();
           }
    
           final SharedPreferences config = getSharedPreferences(PREFS_NAME, 0);
    
            jakisPrzycisk.setOnClickListener(new OnClickListener() {
               public void onClick(View v) {
    
                   // Zapisujemy pobrany tekst z pola EditText
                   String tekst = jakisTekst.getText().toString();
                   SharedPreferences.Editor configEditor = config.edit();
                   configEditor.putString("tekst", tekst);
                   configEditor.commit();
    
                   AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getBaseContext());
                   Waluty.updateWidget(getBaseContext(), appWidgetManager, mAppWidgetId);
    
                   Intent resultValue = new Intent();
                   resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                           mAppWidgetId);
                   setResult(RESULT_OK, resultValue);
                   finish();
               }
           });
       }
    
    }

    z góry dzięki za pomoc

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x