¿Cómo pasar datos y abrir una Actividad de Widget?

En mi clase ListProvider que implementa RemoteViewsFactory he puesto el siguiente código a continuación:

 @Override public RemoteViews getViewAt(int position) { RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.list_row); rv.setTextViewText(R.id.heading, merch_name); rv.setTextViewText(R.id.content, teaser); Bundle extras = new Bundle(); extras.putInt(WidgetProvider.EXTRA_ITEM, position); extras.putString(WidgetProvider.MERCHANT_ITEM, mWidgetItems.get(position).merchant_id); Intent fillInIntent = new Intent(); fillInIntent.putExtras(extras); rv.setOnClickFillInIntent(R.id.llRow, fillInIntent); return rv; } 

Puse Logs en mi onReceive de WidgetProvider tiene el ID correcto cuando hice clic, pero después de abrir la actividad no tiene el ID correcto donde se pone en extras . También hay tiempo para que no abra la Activity que proporcioné y simplemente abra mi MainActivity . Esto ocurre cuando he eliminado mi aplicación de la aplicación recently open app y, a continuación, utilizar el widget .

Aquí está mi código para onReceive en mi WidgetProvider

  public class WidgetProvider extends AppWidgetProvider { public static final String TOAST_ACTION = "my.packagename.TOAST_ACTION"; public static final String MERCHANT_ITEM = "my.packagename.MERCHANT_ITEM"; @Override public void onReceive(Context context, Intent intent) { AppWidgetManager mgr = AppWidgetManager.getInstance(context); if (intent.getAction().equals(TOAST_ACTION)) { int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); Intent goToDetails = new Intent(context, DetailsActivity.class); goToDetails.putExtra(Constants.MERCHANT_ID, intent.getStringExtra(MERCHANT_ITEM) ); goToDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(goToDetails); super.onReceive(context, intent); } 

Y así es como obtengo el ID en mi DetailsActivity

  public class DetailsActivity extends Activity { String merchantID; @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); setContentView(R.layout.detailsactivity); Bundle extras = getIntent().getExtras(); if (extras != null) { merchantID = extras.getString(Constants.MERCHANT_ID); } 

¿Cómo resolver esto? Gracias de antemano.

setData() en mi onReceive donde paso datos.

  @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if (intent.getAction().equals(TOAST_ACTION)) { int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); Intent goToDetails = new Intent(context, DetailsActivity.class); goToDetails.putExtra(Constants.MERCHANT_ID, intent.getStringExtra(MERCHANT_ITEM) ); goToDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); goToDetails.setData(Uri.parse(goToDetails.toUri(Intent.URI_INTENT_SCHEME))); context.startActivity(goToDetails); } } 

Pero me encuentro con un accidente, si desinstalar la aplicación y luego instalar y no abrir la aplicación primero, a continuación, agregue un widget y haga clic en el ListView .

Descubrió por qué se bloquea debido a mi base de datos que todavía no existe. Porque estoy creando mi base de datos en mi SplashActivity

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.