5

Tengo un widget que se supone que llama a una actividad de la aplicación principal cuando el usuario hace clic en el cuerpo del widget. Mi configuración funciona para una única instancia de widget, pero para una segunda instancia del mismo widget PendingIntent se reutiliza y, como resultado, la información vital que estoy enviando como extra se sobrescribe para la primera instancia. Así que pensé que debería pasar ID de widget como datos de Intent; sin embargo, tan pronto como agregue Intent#setData, vería en el registro que dos Intenciones separadas son disparadas apropiadamente pero la Actividad no puede recogerlo, así que básicamente la Actividad no surgirá y no pasará nada (sin error o advertencia éter) Así es como la actividad se configura en el Manifiesto:Android: la carga de datos en el intento falla al cargar la actividad

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

y aquí está el código que está configurado para manejar el 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)); 

la aplicación principal y el widget se empaquetan como 2 APK por separado en su propio paquete y Manifiesto

Respuesta

4

Creo que necesita una etiqueta <data> en su <intent-filter> para que la intención que está disparando coincida con el filtro de intención que ha registrado.

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

también Uso Uri.EMPTY puede ser un problema. Me gustaría crear su propio esquema de Uri, de modo que su setData() llamada se ve algo como:

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

y su intención de filtro se vería así:

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

Oh! Pero, por supuesto, ¡tonto! Gracias @mbaird - funciona perfectamente ahora – Bostone

Cuestiones relacionadas