Tôi hiện đang tìm hiểu về các tiện ích trong Android.Làm thế nào để cập nhật một Widget động (Không phải chờ 30 phút để onUpdate được gọi)?
Tôi muốn tạo tiện ích WIFI sẽ hiển thị SSID, mức RSSI (Tín hiệu).
Nhưng tôi cũng muốn có thể gửi dữ liệu từ dịch vụ mà tôi đang chạy để tính Chất lượng âm thanh qua wifi.
Dưới đây là những gì tôi có sau khi một số đọc và hướng dẫn nhanh:
public class WlanWidget extends AppWidgetProvider{
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
WifiManager wifiManager;
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new WlanTimer(context, appWidgetManager), 1, 10000);
}
private class WlanTimer extends TimerTask{
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
public WlanTimer(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
thisWidget = new ComponentName(context, WlanWidget.class);
wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
}
@Override
public void run() {
remoteViews.setTextViewText(R.id.widget_textview,
wifiManager.getConnectionInfo().getSSID());
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
dường như ở trên để làm việc ok, nó cập nhật các SSID trên widget mỗi 10 giây.
Tuy nhiên cách hiệu quả nhất để nhận thông tin từ dịch vụ của tôi sẽ chạy để cập nhật định kỳ trên tiện ích của tôi là gì?
Ngoài ra, có cách tiếp cận tốt hơn để cập nhật tiện ích thay vì sử dụng bộ hẹn giờ và tính thời gian không? (Tránh bỏ phiếu)
CẬP NHẬT
Theo đề nghị của Karan của tôi đã thêm đoạn mã sau vào dịch vụ của tôi:
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
ComponentName thisWidget = new ComponentName(context, WlanWidget.class);
remoteViews.setTextViewText(R.id.widget_QCLevel, " " + qcPercentage);
AppWidgetManager.getInstance(context).updateAppWidget(thisWidget, remoteViews);
này được chạy mỗi khi thay đổi mức RSSI nhưng nó vẫn chưa bao giờ cập nhật TextView trên widget của tôi, bất kỳ ý tưởng nào tại sao?
EDIT
Got nó làm việc, nhờ Karan
Đây là giải pháp của tôi, cách tự động cập nhật tiện ích thường xuyên hơn 30 phút. Tôi sử dụng AlarmManager: http://stackoverflow.com/questions/5476867/updating-app-widget-using-alarmmanager/#answer-14319020 – petrnohejl