2010-10-28 3 views
5

Ho un'app Android esistente. Ho aggiunto un semplice widget per utilizzando il seguente:Widget Android nell'emulatore

  • aggiornato il mio manifesta con un blocco <receiver> che fornisce informazioni sul mio AppWidgetProvider implementazione
  • aggiunto un nuovo file xml nella res/xml con un elemento <appwidget-provider> che contiene l'altezza/larghezza/updatePeriod/initialLayout/icona/dicitura attributi
  • aggiunto un semplice layout di default con una ImageView e TextView
  • implementato il mio AppWidgetProvider

Quando elaboro e distribuisco questo nell'emulatore, il mio Widget non viene visualizzato nell'elenco di widget. Mi manca qualche passaggio per "installare" il widget? Devo fare qualcosa di speciale per farlo apparire nell'emulatore?

EDIT: Ecco quello che il mio ricevitore manifesta assomiglia:

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

ed ecco quello che la mia my_appwidget_info.xml sembra:

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

funziona su un dispositivo vero e proprio? – EboMike

+0

Non so. Sto ancora aspettando che il dispositivo si mostri. – psychotik

+1

Non hai installato l'app sulla tua scheda SD (virtuale) per caso? Qual è il percorso di installazione nel tuo manifest? – EboMike

risposta

6

Il vostro tag del ricevitore nel manifesto hanno l'intento corretta -filter e meta-dati? Esso dovrebbe essere simile all'esempio nella 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> 

Il ricevitore ha bisogno sia di quei pezzi di essere riconosciuto come un widget app.

Modifica: anche i tag <receiver> devono trovarsi all'interno dei tag <application>.

+0

Grazie, sì lo fa. – psychotik

+0

Hmm, beh, sembra che tu abbia tutto il necessario per comparire nell'elenco dei widget. Ho copiato il codice che hai fornito in un nuovo progetto e il widget è comparso nella lista per me. Non si verificano errori durante l'implementazione? – tinja

+0

no, nessun errore. Ho anche provato a disinstallare la mia app e reinstallarla. Altri suggerimenti? – psychotik

1

Se la tua app è installata sulla scheda SD, tutti i tuoi widget si rifiuteranno di comparire nell'elenco. (I documenti chiariscono che non puoi avere i widget se sei nella memoria esterna).

È possibile accedere alle impostazioni nella schermata iniziale, accedere a Applicazioni e accedere all'app. Se ti offre "Passa al telefono", allora è sulla scheda SD. È possibile impostare la posizione di installazione su InternalOnly per impedire che venga inserita nella scheda SD.

Se si consente l'installazione su scheda SD (poiché in genere gli utenti lo richiedono), è necessario chiarire che non possono avere il widget in quel caso. Se un'app si trova su una scheda SD e si desidera utilizzare il widget, è necessario prima spostare l'app nella memoria interna e quindi ripristinare il telefono (!).

+0

Queste sono buone informazioni - grazie. Ma nel mio emulatore sto installando nella memoria principale. Ho persino eseguito questo su emulatori senza alcuna scheda SD. – psychotik

-1

Ho avuto lo stesso problema. Si è scoperto che avevo accidentalmente due file xml di risorse di meta-dati in due diverse cartelle, la mia cartella "layout" e la mia cartella "xml". Stava trovando la risorsa (vuota) prima in "layout" e usando quella per i suoi meta-dati.

È stato uno sbaglio stupido, ma assicurati di avere solo un file xml con quel nome che è indicato nel tuo tag meta-data del ricevitore. Inoltre penso che dovrebbe essere sempre nella cartella xml.

-1

Ho avuto lo stesso problema. E il mio problema era che ho il file /layout/main.xml quando lo elimino apparirà il widget!

E suona come @ubzack risposta, ma penso che parlare di qualcos'altro [stesso nome di file xml]

1

Ho avuto lo stesso problema pure. Alcune cose da verificare che possono impedirne la visualizzazione su modelli diversi.

1) Deve avere un minHeight e minWidth impostato su AppWidget-Provider nel xml, se si rimuove uno di questi e si avvia in emulatore, il proprio widget sarà scomparso. 2) Alcuni modelli presentano problemi se non si fornisce un'anteprimaImage in AppWidget-Provider 3) Alcuni modelli possono presentare problemi se si installa sulla scheda SD anziché internamente, sebbene io continui a preferire l'installazione su scheda SD. 4) Alcuni modelli devono avere un'attività definita con Main e Launcher anche se non si intende utilizzare alcuna attività. (Si può semplicemente fare uno dummy che dice 'questa è solo un'app di widget' 5) Devi avere la configurazione manifest corretta come mostrato nella risposta di TinJa.

Ho combattuto in questo modo per un po 'di tempo prima di riuscire a visualizzarlo in tutti i modelli e gli emulatori, quindi sii paziente, assicurati di non mancare nulla e imposta i valori che devono essere presenti. Ricorda che alcuni telefoni memorizzano nella cache l'Elenco dei widget e potrebbero non essere aggiornati finché non hai avviato la prima attività o riavviato il telefono.

Spero che questo aiuti.

Sam

0

ho avuto lo stesso problema poi ho finalmente capirlo. Di solito quando si emula un'applicazione, ha un'attività da caricare. Per un'app per soli widget, non è così, ma l'IDE pensa ancora che tu stia tentando di avviare un'attività.

Per modificare questo vai al tuo costruire Opzioni

Example

quindi modificare le opzioni di avvio a Niente

Example