Изменить действие намерения Android с открытия URI на отображение тоста? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь, чтобы мой виджет использовал действие onClick, чтобы запросить обновление. Я нашел демо-код, который работает, но он открывает URI в браузере. У меня проблемы с заменой действия URI чем-то более простым, например, отображением тоста. Я отметил строку, которую пытаюсь изменить, но я не знаю, как заставить Android установить другое действие, отличное от Action.VIEW.

public class NewAppWidget extends AppWidgetProvider {

static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);

    //I AM TRYING TO CHANGE THIS INTENT
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com/"));
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

    views.setOnClickPendingIntent(R.id.refresh, pendingIntent);
    appWidgetManager.updateAppWidget(appWidgetId, views);
}

@Override //Nothing changed here
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    for (int appWidgetId : appWidgetIds) {
        updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }
}

Конкретные строки

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com/"));
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

1 Ответ

0 голосов
/ 04 сентября 2018

Я получил это работать совершенно неожиданно. Я следовал за этим постом, но оставил свои заявления о намерениях, где они были. Полученные строки были:

Intent intent = new Intent(context, NewAppWidget.class);
        intent.setAction(refresh);
        intent.putExtra("appWidgetId", appWidgetId);

        views.setOnClickPendingIntent(R.id.refresh, PendingIntent.getBroadcast(context,0,intent, PendingIntent.FLAG_UPDATE_CURRENT));
        appWidgetManager.updateAppWidget(appWidgetId, views);

с последующим onReceive:

@Override
    public void onReceive(Context context, Intent intent) {
        if(refresh.equals(intent.getAction())) {
            Toast.makeText(context, "Clicked", Toast.LENGTH_LONG).show();
        }
    }

Изменить для ясности: intent.getAction () должно быть зарегистрированным действием в фильтре намерений получателя.

...