Подтвердить что ты не робот

Виджет Android не отображается в списке после

Я обновляю свое приложение с помощью виджета. Это не первый виджет, который я сделал. Я всегда сталкивался с странными проблемами, но виджет в конечном итоге перерастал в список.

Вот что я сделал до сих пор:

  • Создано widget_layout.xml
  • Создано widget_info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
    android:minWidth="110dp"
    android:minHeight="30dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/widget_layout"
    android:resizeMode="none">
</appwidget-provider>
  • Созданный класс WidgetProvider
  • Добавлен виджет для манифеста в разделе <application> (по какой-то причине он не может вставлять фрагмент манифеста здесь, он просто не отображается, см. код здесь)

Тем не менее, не удается найти виджет в списке виджетов. Я отлаживаю приложение на реальном устройстве. Я использую проект библиотеки, но файлы виджета, но все в проекте я запускаю напрямую. Что может быть здесь?

4b9b3361

Ответ 1

Проблема была android:installLocation="preferExternal"

Это как-то вызывает проблему с списком виджетов, если приложение установлено на SD

Ответ 2

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

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/pmt_schedule_scroll_widget"
android:minHeight="146dip"
android:minResizeHeight="73dp"
android:minWidth="146dip"
android:resizeMode="vertical"
android:updatePeriodMillis="0" />

Ответ 3

Такая проблема может произойти с двумя сценариями. Оба ответа выше, и это полный ответ, и я столкнулся с обоими сценариями и разрешил их оба.

Scenario1

Если приложение указывает параметр android: installLocation = "preferExternal" в манифесте, приложение будет установлено во внешнюю память и оно не будет отображаться в списке виджетов. Также, если вы установили свой телефон для установки всех приложений на SD-карте, это также произойдет.

Решение

Перейдите в Настройки- > Приложения- > YourApp Затем перейдите к телефону. Это переместит приложение в память телефона и теперь вы увидите виджет в списке виджетов

Scenario2

Если указанное исправление не решило вашу проблему, возможно, у вас есть устройство с версией android 4.X.X.

Затем вы должны установить по крайней мере следующие параметры в файле widget_info.xml

solution2

Android: MinHeight = "XXXdp" андроид: MinWidth = "XXXdp"

Ответ 4

Вам необходимо зарегистрировать BroadcastReceiver в файле манифеста. Например:

<receiver
   android:icon="@drawable/icon"
   android:label="Example Widget"
   android:name="MyWidgetProvider" >
   <intent-filter >
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>

   <meta-data
      android:name="android.appwidget.provider"
      android:resource="@xml/widget_info" />
</receiver> 

Я взял этот код из http://www.vogella.com/articles/AndroidWidgets/article.html

См. ссылку для полного учебника

Ответ 5

Я пробовал все возможные решения, и ничего не работало для меня... И, наконец, я решил это.

В моем случае проблема была чрезмерной: я считал, что в теге метаданных нам нужно определить уникальное имя для провайдера (например: "com.example.myprovider" ), а также ссылку к ресурсу xml.

Неправильно:

<meta-data
      android:name="com.example.myprovider"
      android:resource="@xml/widget_info" />

Справа:

<meta-data
  android:name="android.appwidget.provider"
  android:resource="@xml/widget_info" />

Ответ 6

после нескольких часов поиска и неспособности решить проблему, я решил открыть образец проекта виджета, который работает и идет сравнение элемента по позиции, чтобы увидеть, что было не так, в конце концов, я решил добавить следующие строки в мой res/XML/widget_info.xml:

android:minHeight="XXXdp"
android:minResizeHeight="XXXdp"
android:minResizeWidth="XXXdp"
android:minWidth="XXXdp"

где XXX - некоторое значение.

Ответ 7

В моем случае проблема была в фильтре намерений в приемнике.

Неправильно:

<intent-filter>
    <action android:name="APPWIDGET_UPDATE" />
</intent-filter>

Правильный:

<intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>