Я разрабатываю виджет для своего приложения и хочу передать определенные данные из виджета в приложение. Пользователь может добавить несколько версий виджета, и мне нужно определить, из какого виджета он исходит, чтобы я мог отображать конкретную информацию в приложении.
То, что у меня есть, работает до сих пор, но только если я полностью выхожу из своего приложения (неоднократно нажимая кнопку «Назад»), в противном случае оно, похоже, не обнаруживает передаваемые данные.
Этот код я должен передать данные из виджета в приложение:
public class WidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++)
UpdateWidget(context, appWidgetManager, appWidgetIds[i]);
}
public static void UpdateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId)
{
Intent intent = new Intent(context, Main.class);
final Bundle bun = new Bundle();
bun.putInt("widgetId", appWidgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(bun);
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.widgetText, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
ОБНОВЛЕНИЕ
Приближаемся к тому, чтобы это заработало, благодаря Талу Канелю. У меня есть ActionBar
в моем приложении, и, следуя рекомендациям Google, у меня есть этот код в onOptionsItemSelected
:
if (item.getItemId() == android.R.id.home) {
final Intent intent = new Intent(activity, Main.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
}
Если я нажму кнопку «Назад» в ActionBar
, затем сверну свое приложение и нажму на виджет, этот код всегда будет нулевым:
if (getIntent().getExtras() != null)
{
}
ОБНОВЛЕНИЕ 2
На самом деле, простое возвращение к основному действию в моем приложении приводит к тому, что getExtras()
становится нулевым. У меня есть этот код в моем виджете приложения, который не передает никаких дополнений в приложение:
PendingIntent piMain = PendingIntent.getActivity(context, appWidgetId, new Intent(context, Main.class), PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.widgetTitle, piMain);
Если я нажму на эту часть в своем виджете, а затем вернусь и нажму на часть моего виджета, которая должна передавать дополнительные функции, getExtras()
всегда будет нулевым.