Appwidget продолжает сбрасывать фон в прозрачный - PullRequest
0 голосов
/ 09 марта 2012

Я создал функциональность в 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")));

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

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

/* 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 Ответ

0 голосов
/ 21 марта 2012

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

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

Я внедряю службу, которая постоянно работает, которая переопределяет метод onConfigurationChanged ().

Для идей см .:

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

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

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

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

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

<p>/* 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;
  }</p>

<p>@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's preferred setting etc.
     */
  }
}
...