5

Ho un widget che dovrebbe chiamare un'attività dell'App principale quando l'utente fa clic sul corpo del widget. Il mio setup funziona per una singola istanza di widget ma per una seconda istanza dello stesso widget il PendingIntent viene riutilizzato e come risultato le informazioni vitali che sto inviando come extra vengono sovrascritte per la prima istanza. Quindi ho pensato che dovevo passare l'ID del widget come dati Intent tuttavia non appena aggiungo Intent#setData vedrei nel log che 2 Intenti separati sono appropriatamente licenziati ma l'attività non riesce a raccoglierlo così fondamentalmente l'attività non verrà fuori e non succede nulla (nessun errore o avviso etere) Ecco come l'attività è messa a punto nel manifesto:Android: l'aggiunta di dati a Intent non riesce a caricare Attività

<activity android:name=".SearchResultsView" 
     android:label="@string/search_results" 
     <intent-filter> 
      <action android:name="bostone.android.search.RESULTS" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

ed ecco il codice che è messa a punto per la gestione del click

Intent di = new Intent("bostone.android.search.RESULTS"); 
di.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
// if line below is commented out - the Activity will start 
di.setData(ContentUris.withAppendedId(Uri.EMPTY, widgetId)); 
di.putExtra("URL", url); 
views.setOnClickPendingIntent(R.id.widgetContent, 
    PendingIntent.getActivity(this, 0, di, 0)); 

l'applicazione principale e il widget sono confezionati come 2 APK separati ciascuno nel proprio pacchetto e Manifest

risposta

4

Penso che sia necessario un tag <data> nello <intent-filter> in modo che l'intenzione che si sta attivando corrisponda al filtro intentato che si è registrato.

https://developer.android.com/guide/topics/manifest/data-element.html

utilizzando anche Uri.EMPTY può essere un problema. Mi piacerebbe creare il proprio schema di Uri, in modo che la vostra setData) chiamata (simile a:

di.setData(Uri.withAppendedPath(Uri.parse("droidln://widget/id/"), String.valueOf(appWidgetId))); 

e la tua intent-filtro sarà simile:

<intent-filter> 
     <action android:name="bostone.android.search.RESULTS" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="droidln"/> 
    </intent-filter> 
+0

Oh! Ma certo - stupido me! Grazie a @mbaird: funziona perfettamente ora – Bostone

Problemi correlati