5

J'ai un widget qui est censé appeler une activité de l'application principale lorsque l'utilisateur clique sur le corps du widget. Ma configuration fonctionne pour une seule instance de widget, mais pour une seconde instance du même widget, PendingIntent est réutilisé et, par conséquent, les informations vitales que j'envoie en plus sont écrasées pour la première instance. Donc je me suis dit que je devais passer ID de widget comme Intent données mais dès que j'ajouterais Intent#setData je verrais dans le journal que 2 intentions distinctes sont correctement déclenchées mais l'activité ne parvient pas à le ramasser donc essentiellement l'activité ne viendra pas et rien ne se passe (pas d'erreur ou de l'éther avertissement) Voici comment l'activité est configuré dans le Manifest:Android: Ajout de données à l'intention de charger l'activité

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

et le code est ici qui est configuré pour la manipulation du clic

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'application principale et le widget sont emballés comme 2 APK séparés chacun dans son propre paquet et Manifeste

Répondre

4

Je pense que vous avez besoin d'une balise <data> dans votre <intent-filter> pour que l'intention que vous tirez corresponde au filtre d'intention que vous avez enregistré.

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

également en utilisant Uri.EMPTY peut être un problème. Je crée votre propre système d'Uri, de sorte que votre setData() appel ressemble à quelque chose comme:

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

et votre intention filtre ressemblerait à ceci:

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

Oh! Mais bien sûr - idiot moi! Merci @mbaird - ça fonctionne parfaitement maintenant – Bostone