виджет работает только после 2 установок или перезагрузки - PullRequest
0 голосов
/ 17 сентября 2018

Мое приложение-виджет работает только в том случае, если я установил виджет, добавил его на экран, а затем установил снова, если я добавляю другой виджет, мне нужно установить его снова, чтобы второй заработал (перезагрузка устройства также помогает, после перезагрузки все виджеты на экране работают, У меня есть файл конфигурации, и он не достигает моего appWidgetProvider (действие настраивается в методе onUpdate). Как я могу заставить мое приложение обновить виджет из файла конфигурации?

весь мой проект: https://github.com/vlad1001/Widget

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Мой первый выстрел.Взгляните на файл AndroidManifest.xml в вашем проекте.

Существует строка, которая может вызвать проблему, которую Вы описали.

android:allowBackup="true"

Разрешить ли приложению участвовать в инфраструктуре резервного копирования и восстановления.Если для этого атрибута задано значение false, резервное копирование или восстановление приложения никогда не будет выполняться, даже если выполняется резервное копирование всей системы, в противном случае все данные приложения будут сохранены через adb.Значение по умолчанию для этого атрибута - true.

Вкратце: удаление приложения не означает, что вы удалили содержимое и настройки приложения.

Попробуйте установить для него значение false.

Проблема, связанная с данной: https://stackoverflow.com/a/35296675/619673


Альтернатива: после первой установки очистить кэш приложения, затем запустить (или вызвать в терминале adb shell pm clear <your.package.name).

0 голосов
/ 21 сентября 2018

Единственное отличие в вашем коде в том, что вы заканчиваете действие перед обновлением виджета. Из документации метод onUpdate не будет вызываться в первый раз. Я думаю, что вы должны добавить следующее:

super.onCreate(icicle);
setResult(RESULT_CANCELED);

Удалить эту строку:

setResult(RESULT_CANCELED, resultValue);

После этого измените вызов на обновление до setResult и finish ():

        //make the update before finish()
        appWidgetManager.updateAppWidget(appWidgetId, views);

        Intent resultValue = new Intent();
        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        setResult(RESULT_OK, resultValue);
        finish();

Я не воспроизводил вашу проблему, пожалуйста, дайте мне знать, если эта работа для вас.

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

views.setOnClickPendingIntent(R.id.example_widget_imageview, clickPendingIntent);
...