Android-виджет в эмуляторе - PullRequest
       2

Android-виджет в эмуляторе

5 голосов
/ 29 октября 2010

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

  • обновил мой манифест с помощью блока <receiver>, который предоставляет информацию о моей AppWidgetProvider реализации
  • , добавил новые файлы XML вВ res / xml с элементом <appwidget-provider>, который содержит атрибуты height / width / updatePeriod / initialLayout / icon / label
  • , добавлен простой макет по умолчанию с ImageView и TextView
  • реализовал мой AppWidgetProvider

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

РЕДАКТИРОВАТЬ: Вот как выглядит мой получатель манифеста:

<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>

Ответы [ 6 ]

6 голосов
/ 29 октября 2010

Имеет ли тег получателя в манифесте надлежащий фильтр намерений и метаданные? Это должно выглядеть как пример в документации :

<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>.

1 голос
/ 26 мая 2013

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

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

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

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

Сэм

1 голос
/ 29 октября 2010

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

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

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

0 голосов
/ 20 октября 2016

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

Чтобы изменить это, перейдите к Параметры сборки

Example

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

Example

0 голосов
/ 14 июня 2012

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

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

0 голосов
/ 26 октября 2011

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

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

...