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.