studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android listview widget

android - programacion - ¿Cómo pasar datos y abrir una Actividad desde Widget?



manual de programacion android pdf (1)

setData() en mi onReceive donde paso los 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 bloqueo, si desinstalo la aplicación y luego la instalo y no la abre primero, luego agrego un widget y widget clic en el ListView .

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

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 of WidgetProvider que tiene la identificación correcta cuando hice clic, pero después de abrir la actividad no tiene la identificación correcta donde se pone en extras . También hay tiempo para que no abra la Activity que proporcioné y simplemente abra mi MainActivity . Esto sucede cuando eliminé mi aplicación de recently open app y luego uso 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.