2010-10-28 14 views
5

Tengo una aplicación de Android existente. he añadido un widget sencillo para que utilizando la siguiente:Widget de Android en el emulador

  • actualizado mi manifiesta con un bloque <receiver> que proporciona información acerca de mi aplicación AppWidgetProvider
  • añadido un nuevo archivos xml en res/xml con un elemento <appwidget-provider> que contiene el/UpdatePeriod/initialLayout/icono/etiqueta de altura/anchura de los atributos
  • añadió un diseño predeterminado simple con una ImageView y una TextView
  • implementarse mi AppWidgetProvider

Cuando construyo e implemento esto en el emulador, mi Widget no aparece en la lista de widgets. ¿Me falta algún paso para "instalar" el widget? ¿Debo hacer algo especial para que aparezca en el emulador?

EDIT: Esto es lo que se ve mi receptor manifiesta como:

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

y esto es lo que se ve mi my_appwidget_info.xml como:

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

¿Funciona en un dispositivo real? – EboMike

+0

No lo sé. Todavía estoy esperando que aparezca el dispositivo. – psychotik

+1

¿No instaló la aplicación en su tarjeta SD (virtual) por casualidad? ¿Cuál es la ubicación de instalación en su manifiesto? – EboMike

Respuesta

6

¿Su etiqueta de receptor en el manifiesto tiene la intención apropiada -filtro y meta-datos? Debe quedar como el ejemplo de la 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> 

El receptor necesita tanto de esas piezas a ser reconocida como una widget de aplicación.

Editar: Las etiquetas <receiver> también deben ubicarse dentro de las etiquetas <application>.

+0

Gracias, sí lo hace. – psychotik

+0

Hmm, bueno, parece que tienes todo lo necesario para aparecer en la lista de widgets. Copié el código que proporcionaste en un nuevo proyecto y el widget apareció en la lista para mí. ¿No estás obteniendo ningún error cuando implementas? – tinja

+0

no, no hay errores. Incluso traté de desinstalar mi aplicación y volver a instalarla. ¿Otras sugerencias? – psychotik

1

Si su aplicación está instalada en la tarjeta SD, todos sus widgets silenciosamente se negarán a aparecer en la lista. (Los documentos dejan en claro que no puede tener widgets si está en el almacenamiento externo).

Puede ir a la configuración en la pantalla de inicio, vaya a Aplicaciones y vaya a su aplicación. Si le ofrece "Mover al teléfono", entonces está en la tarjeta SD. Puede configurar la ubicación de instalación en internalOnly para evitar que vaya a la tarjeta SD.

Si permite la instalación en la tarjeta SD (porque los usuarios generalmente lo solicitarán), deben tener claro que no pueden tener el widget en ese caso. Si una aplicación está en la tarjeta SD y desea usar el widget, primero tiene que volver a mover la aplicación al almacenamiento interno y luego restablecer el teléfono (!).

+0

Esa es una buena información, gracias. Pero en mi emulador estoy instalando en la memoria principal. Incluso he ejecutado esto en emuladores sin ninguna tarjeta SD. – psychotik

-1

Tuve el mismo problema. Resultó que accidentalmente tenía dos archivos xml de recursos de metadatos en dos carpetas diferentes, mi carpeta de "diseño" y mi carpeta "xml". Fue encontrar primero el recurso (vacío) en "diseño" y usarlo para sus metadatos.

Fue un error estúpido, pero asegúrese de tener solo un archivo xml de ese nombre que se señala en su etiqueta de metadatos del receptor. También creo que siempre debería estar en la carpeta xml.

-1

Tuve el mismo problema. ¡Y mi problema es que tengo el archivo /layout/main.xml cuando lo elimino, aparece el widget!

que suene como @ubzack respuesta, pero creo que hablar de algo [nombre mismo archivo XML] otro

1

que tenían el mismo problema también. Algunas cosas para comprobar que pueden evitar que aparezca en diferentes modelos.

1) Debe tener un minHeight y minWidth establecidos en AppWidget-Provider en el xml, si elimina alguno de ellos y lo inicia en el emulador, su artilugio desaparecerá. 2) Algunos modelos tienen problemas si no proporciona una imagen preliminar en AppWidget-Provider 3) Algunos modelos pueden tener problemas si los instala en la tarjeta SD en lugar de hacerlo internamente, aunque todavía prefiero instalarlos en la tarjeta SD. 4) Algunos modelos necesitan tener una Actividad con Main y Launcher definidos, incluso si no tiene la intención de utilizar ninguna de las Actividades. (Simplemente puede hacer una carta ficticia que diga 'esto es solo una aplicación de widgets' 5) Tiene que tener su configuración de manifiesto correctamente como se muestra en la respuesta de TinJa.

He luchado durante bastante tiempo antes de lograr que aparezca en todos los modelos y emuladores, así que tenga paciencia, asegúrese de que no le falta nada y establezca los valores que deben estar ahí. Recuerde que algunos teléfonos almacenan en caché la lista de widgets y es posible que no se actualicen hasta que haya lanzado su primera actividad o reiniciado el teléfono.

Espero que ayude.

Sam

0

Yo tenía el mismo problema, entonces finalmente a averiguarlo. Por lo general, cuando emula una aplicación, tiene una actividad para cargar. Para una aplicación solo de widget, ese no es el caso, pero el IDE aún cree que está tratando de iniciar una actividad.

Para cambiar esto, vaya a sus opciones de generación

Example

continuación, cambiar el Opciones de lanzamiento a Nada

Example