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.
*/
}
}