Appwidget сохраняет рекреационный фон в прозрачном

Я создал функциональность в appwidget, которая позволяет пользователю изменять фон с прозрачного на полупрозрачный. По умолчанию для xml установлен прозрачный. Когда пользователь изменяет предпочтение фона, настройка сохраняется и фон обновляется с использованием кода ниже:

public static Bitmap setBackground (int bgcolor)
{
  {
    Bitmap.Config config=Bitmap.Config.ARGB_8888; 
    Bitmap bitmap=Bitmap.createBitmap(2, 2, config);
    Canvas canvas=new Canvas(bitmap); 
    canvas.drawColor(bgcolor);
    return bitmap;
  }
}

/* set background */
if (ExampleWidgetProvider.background==1)
  views.setImageViewBitmap(R.id.bgcolor, setBackground(Color.parseColor("#aaaaaaaa")));
else
  views.setImageViewBitmap(R.id.bgcolor, setBackground(Color.parseColor("#00000000")));

Один пользователь сообщает, что фон заменен на прозрачный, когда он установил его полупрозрачным. Это может показаться случайным в течение нескольких минут в час или полдня.

Я понял, что это проблема с фоном, а не с каким-то изменением настроек, поскольку я отправил пользователю версию приложения, которая всегда будет менять фон на полупрозрачный, то есть используя:

/* set background */
if (ExampleWidgetProvider.background==1)
  views.setImageViewBitmap(R.id.bgcolor, setBackground(Color.parseColor("#aaaaaaaa")));
else
  views.setImageViewBitmap(R.id.bgcolor, setBackground(Color.parseColor("#aaaaaaaa")));

Но интересно, что это не исправить. Поскольку значение по умолчанию в xml установлено на прозрачное, я подозреваю, что приложение каким-то образом перезапускается или перерисовывается, и используется макет по умолчанию.

Как я могу обнаружить и/или обойти это?

Обновление. Пользователь (как и ожидалось) исправил исправление, которое постоянно меняет цвет фона в xml до полупрозрачного. Это означает, что система сбрасывает фон по неизвестной причине.

Пользователь использует LG PG 970 V. 2.2.2 и за что стоит использовать "Juice Defender Ultimate" и настроен на то, чтобы не подключаться к Интернету в течение ночи. Мой appwidget действительно подключается к Интернету через определенные промежутки времени.

Ответ 1

Ну, я действительно нашел способ воспроизвести его. У меня есть LG с выдвижной клавиатурой, которая вращает домашний экран, когда вы выдвигаете клавиатуру. Как только это делает, полупрозрачный фон исчезает. Похоже, я должен обнаружить какое-то событие перерисовывания.

Я нашел работу или решение, не совсем уверенное. В любом случае это решает проблему, по крайней мере, когда я тестирую ее с помощью вышеупомянутого метода воспроизведения.

Я реализую службу, которую я постоянно выполняю, что переопределяет методConfigurationChanged().

Для идей см.:

вы не можете получить это через компоненты, объявленные в манифесте

Это обеспечивает решения для действий, но я еще не уверен, как использовать что-то подобное в appwidgets, если это вообще возможно:

Пример кода, эта служба запускается в классе AppWidgetProvider в методе onEnabled(). Таким образом, он запускается только независимо от того, сколько экземпляров вашего приложения работает, и в идеале должно иметь дело с любым экземпляром.

public class ExampleConfigChangeService extends Service
{
  @Override
  public void onCreate()
  {
    super.onCreate();
    /* whatever code you need here */
  }

@Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); /* whatever code you need here */ }

/* you need this or it will not compile **/ @Override public IBinder onBind(Intent intent) { /* We don't need to bind to this service */ return null; }

@Override public void onConfigurationChanged(Configuration newConfig) { /* * this is the code that will run whenever an ACTION_CONFIGURATION_CHANGED happens * do whatever needs to be done, such as re-reading preferences, * resetting background to user preferred setting etc. */ } }