2010-10-28 2 views
5

У меня есть приложение для Android. Я добавил простой виджет к нему, используя следующие:Android-виджет в эмуляторе

  • обновил мой манифест с <receiver> блок, который содержит информацию о моем AppWidgetProvider реализации
  • добавлены новые XML-файлы в разрешении/XML с <appwidget-provider> элементом, который содержит высота/ширина/UpdatePeriod/initialLayout/значок/этикетки атрибуты
  • добавил простой макет по умолчанию с ImageView и TextView
  • реализован мой AppWidgetProvider

Когда я создаю и развертываю это в эмуляторе, мой виджет не отображается в списке виджетов. Я пропустил какой-то шаг, чтобы «установить» виджет? Нужно ли мне делать что-нибудь особенное, чтобы оно появлялось в эмуляторе?

EDIT: Вот что мой манифест приемник выглядит следующим образом:

<receiver android:name=".MyAppWidgetProvider" 
      android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
       android:resource="@xml/my_appwidget_info" /> 
</receiver> 

и вот что мой my_appwidget_info.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:icon="@drawable/ic_logo" 
    android:label="MySampleApp" 
    android:minWidth="294dp" 
    android:minHeight="72dp" 
    android:updatePeriodMillis="86400000" 
    android:initialLayout="@layout/my_app_widget" > 
</appwidget-provider> 
+0

ли работа на реальном устройстве? – EboMike

+0

Не знаю. Я все еще жду, пока устройство не появится. – psychotik

+1

Вы не установили приложение на свою (виртуальную) SD-карту случайно? Каково место установки в вашем манифесте? – EboMike

ответ

6

ли ваш приемник тег в манифесте есть соответствующие намерения -фильтр и метаданные? Он должен выглядеть как пример, в documentation:

<receiver android:name="MyAppWidgetProvider" > 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
       android:resource="@xml/my_appwidget_info" /> 
</receiver> 

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

Редактировать: теги <receiver> также должны быть расположены внутри тегов <application>.

+0

Спасибо, да. – psychotik

+0

Хм, похоже, у вас есть все необходимое для отображения в списке виджетов. Я скопировал код, который вы предоставили, в новый проект, и виджет появился в списке для меня. Вы не получаете никаких ошибок при развертывании? – tinja

+0

нет, никаких ошибок. Я даже пытался удалить приложение и переустановить его. Другие предложения? – psychotik

1

Если ваше приложение установлено на SD-карте, все ваши виджеты будут спокойно отказываться от отображения в списке. (В документах четко указывается, что вы не можете иметь виджетов, если находитесь во внешнем хранилище).

Вы можете перейти к настройкам на главном экране, перейти к Приложениям и перейти в свое приложение. Если он предлагает вам «Переместить на телефон», то он находится на SD-карте. Вы можете установить местоположение установки на internalOnly, чтобы предотвратить его переход на SD-карту.

Если вы разрешаете установку на SD-карту (поскольку пользователи обычно просят об этом), им необходимо четко указать, что в этом случае у них не может быть виджет. Если приложение находится на SD-карте и вы хотите использовать виджет, сначала нужно перенести приложение обратно на внутреннее хранилище и затем сбросить телефон (!).

+0

Это хорошая информация - спасибо. Но в моем эмуляторе я устанавливаю в основную память. Я даже запускаю это на эмуляторах без SD-карты. – psychotik

-1

У меня была та же проблема. Оказалось, что у меня случайно было два XML-файла ресурсов метаданных в двух разных папках, моей папке «layout» и моей папке «xml». Сначала он находил (пустой) ресурс в «макете» и использовал его для своих метаданных.

Это была глупая ошибка, но убедитесь, что у вас есть только один XML-файл с таким именем, на которое указывает метка метаданных вашего получателя. Также я думаю, что это всегда должно быть в папке xml.

-1

У меня была та же проблема. И моя проблема заключалась в том, что у меня есть /layout/main.xml файл, когда я удаляю его виджет!

Это звучит как @ubzack ответ, но я думаю, что он говорил о чем-то еще [же имя файла XML]

1

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

1) Должен иметь minHeight и minWidth, установленный на AppWidget-Provider в xml, если вы удалите любой из них и запустите в эмуляторе, ваш виджет исчезнет. 2) Некоторые модели имеют проблемы, если вы не предоставляете PreviewImage в AppWidget-Provider 3) Некоторые модели могут иметь проблемы, если вы устанавливаете на SD-карту, а не внутренне, хотя я по-прежнему предпочитаю устанавливать на SD-карту. 4) Некоторые модели должны иметь определенную активность с Main и Launcher, даже если вы не собираетесь использовать какие-либо действия. (Вы можете просто сделать фиктивный, который говорит: «Это приложение только для виджета» 5) Вы должны правильно настроить манифест, как показано в ответе TinJa.

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

Надеюсь, что это поможет.

Сэм

0

У меня была та же проблема, тогда я, наконец, понять это. Обычно, когда вы эмулируете приложение, у него есть активность для загрузки. Для приложения с виджетами это не так, но среда IDE все еще думает, что вы пытаетесь запустить мероприятие.

Чтобы изменить это перейти на ваш Опции сборки

Example

затем измените параметры запуска в Ничего

Example

Смежные вопросы