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