Я пытался сделать то же самое, и я думаю, что взломал это. Я обрабатываю событие onBackPressed () в PreferenceActivity и выполняю обновление виджета оттуда с помощью sendBroadcast ().
In PreferenceActivity:
@Override
public void onBackPressed() {
Intent intent=getIntent();
Bundle extras=intent.getExtras();
int widgetId=extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
// this is the intent broadcast/returned to the widget
Intent updateIntent = new Intent(this, WidgetProvider.class);
updateIntent.setAction("PreferencesUpdated");
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
sendBroadcast(updateIntent);
}
В вашем виджетеProvider:
@Override
public void onReceive(Context context, Intent intent) {
if ("PreferencesUpdated".equals(action)) {
// update your widget here
// my widget supports multiple instances so I needed to uniquely identify them like this
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
updateWidgetView(context, remoteView, appWidgetId);
}
}
ПРИМЕЧАНИЕ. В версии 1.5 onBackPressed не поддерживается, поэтому закомментируйте @Override для onBackPressed и добавьте этот код
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d(LOG_TAG, "onKeyDown() "+ keyCode);
if (keyCode==KeyEvent.KEYCODE_BACK && Integer.parseInt(Build.VERSION.SDK)<5) {
onBackPressed();
}
}
Я должен добавить, что я новичок в разработке для Android, поэтому я могу делать это совершенно неправильно. Все, что я могу сказать, это работает для меня:)
Дайте мне знать, как вы поживаете.