Я добавляю к ответу франкского с как я ручка получать эту передачу:
@Override
public void onReceive(Context context, Intent intent) {
// Handle TouchWiz
if(intent.getAction().contentEquals("com.sec.android.widgetapp.APPWIDGET_RESIZE")) {
handleTouchWiz(context, intent);
}
super.onReceive(context, intent);
}
private void handleTouchWiz(Context context, Intent intent) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetId = intent.getIntExtra("widgetId", 0);
int widgetSpanX = intent.getIntExtra("widgetspanx", 0);
int widgetSpanY = intent.getIntExtra("widgetspany", 0);
if(appWidgetId > 0 && widgetSpanX > 0 && widgetSpanY > 0) {
Bundle newOptions = new Bundle();
// We have to convert these numbers for future use
newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, widgetSpanY * 74);
newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, widgetSpanX * 74);
onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
}
}
Вы, возможно, потребуется изменить, как вы справляетесь, что сверток, если вы используете MAX_HEIGHT или MAX_WIDTH, которые я не являюсь.
«или сохранить их в статической целочисленной переменной карты» - это не будет надежным, так как ваш процесс может быть завершен между трансляцией 'com.sec.android.widgetapp.APPWIDGET_RESIZE' и любым последующим' onUpdate() 'звонок. Теперь может показаться, что модифицированный код Samsung инициирует 'onUpdate()' очень скоро после 'com.sec.android.widgetapp.APPWIDGET_RESIZE', и в этом случае статические члены данных могут работать на практике. – CommonsWare
@CommonsWare спасибо, вы можете быть правы. Он не запускает onUpdate автоматически, поэтому я транслирую обновление, если новый размер не тот, который я сохранил в статической переменной. Для статической переменной: приложение автоматически запускается для вызова onReceive, поэтому оно всегда будет устанавливать статическую переменную. Если он будет убит в этот момент, это, вероятно, вызвано сбоем, и он не должен сбой в любом случае. В противном случае мы не сможем обновить виджет. Я что-то упускаю? : | Кстати, мы всегда можем сделать прямое обновление от onreceive-функции, если нам все равно, размер такой же или нет. – frankish