I have implemented changes from a question I asked on this widget here:
I've added and changed a few things, so I would love some more coding advice!
public class SacWidgetService extends Service {
private static final String TAG = "SAC WIDGET SERVICE";
AQuery aq;
private String roseXML = "sac-full.xml";
private String roseUrl;
private AppWidgetManager appWidgetManager;
private int[] allWidgetIds;
private File ext;
private File file;
@Override
public void onStart(Intent intent, int startId) {
aq = new AQuery(this);
// Create some random data
appWidgetManager = AppWidgetManager.getInstance(this
.getApplicationContext());
allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
// get external directory and put the file in there.
ext = Environment.getExternalStorageDirectory();
file = new File(ext, "avalancheconditionsreport/sac/dangerrose.png");
// parse xml and get the rose
xml_ajax();
stopSelf();
super.onStart(intent, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void xml_ajax() {
aq.ajax(roseXML, XmlDom.class, this, "sacCb");
}
public void sacCb(String url, XmlDom xml, AjaxStatus status) {
XmlDom r = xml.tag("reportrose");
roseUrl = r.tag("img").attr("src").trim();
File ext = Environment.getExternalStorageDirectory();
File target = new File(ext,
"avalancheconditionsreport/sac/dangerrose.png");
aq.download(roseUrl, target, new AjaxCallback<File>() {
public void callback(String url, File file, AjaxStatus status) {
String s = status.getMessage();
int i = status.getCode();
String e = s + " | Status Code: " + i;
if (file != null) {
getInfo();
} else {
Log.e("ACR SAC Widget Error", e);
}
}
});
}
private Bitmap getRose() {
Bitmap bitmap = null;
try {
FileInputStream input = new FileInputStream(file);
bitmap = BitmapFactory.decodeStream(input);
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e(TAG, e.getMessage());
}
} catch (FileNotFoundException e) {
Log.e(TAG, e.getMessage());
}
// Toast.makeText(this, "Sierra Avalanche Center Danger Rose",
// Toast.LENGTH_LONG).show();
return bitmap;
}
private void getInfo() {
// TODO Auto-generated method stub
Date dlm = new Date(file.lastModified());
String lm = dlm.toLocaleString();
for (int appWidgetId : allWidgetIds) {
RemoteViews views = new RemoteViews(this.getApplicationContext()
.getPackageName(), R.layout.sac_widget_layout);
Intent clickIntent = new Intent(this.getApplicationContext(),
SACActivity.class);
PendingIntent clickapp = PendingIntent.getActivity(
this.getApplicationContext(), 0, clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.ivdangerrose, clickapp);
views.setTextViewText(R.id.tvupdated, "Updated: " + lm);
views.setImageViewBitmap(R.id.ivdangerrose, getRose());
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}