Как запустить сайт по клику виджета? - PullRequest
3 голосов
/ 19 января 2011

У меня есть базовый виджет, который отображает текстовое поле.Я пытаюсь выяснить, как запустить URL веб-сайта, когда пользователь нажимает на сам виджет.Я не могу найти какой-либо код по этому вопросу.

Ответы [ 5 ]

3 голосов
/ 30 декабря 2013

Сначала установите идентификатор действия.

private final String WIDGET_CLICK = "WidgetClick";

Затем, при инициализации виджета, зарегистрируйте PendingIntent для корневого представления вашего виджета.Замените «YourAppWidgetProvider» классом виджета, который переопределяет AppWidgetProvider.

Intent intent = new Intent(context, YourAppWidgetProvider.class);
intent.setAction(WIDGET_CLICK);
views.setOnClickPendingIntent(R.id.widget_layout, PendingIntent.getBroadcast(context, 0, intent, 0));

Наконец, переопределите onReceive и используйте предоставленный им контекст для запуска вашего веб-сайта.Замените «urlString» на адрес вашего сайта и не забудьте включить в адрес http: //.

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);

    if (intent.getAction() != null && intent.getAction().equals(WIDGET_CLICK)) {
        try {
            Intent webIntent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(urlString));
            webIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(webIntent);
        } catch (RuntimeException e) {
            // The url is invalid, maybe missing http://
            e.printStackTrace();
        }
    }
}
3 голосов
/ 07 декабря 2013

Мы не можем использовать onClickListener напрямую с представлением в виджете.Вместо этого мы должны обернуть наши Intent с PendingIntent и setOnClickPendingIntent для просмотра.

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        // There maybe > 1 instance of our widget
        for (int i : appWidgetIds) {
        startBrowsing(context, appWidgetManager, i);
        }
    }

// Processing click on widget
    private void startBrowsing(Context ctx,
            AppWidgetManager appWidgetManager, int widgetID) {
        RemoteViews widgetView = new RemoteViews(ctx.getPackageName(), R.layout.widget);
        Uri uri = Uri.parse("http://www.google.com");
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        PendingIntent pIntent = PendingIntent.getActivity(ctx, widgetID, intent, 0);
           // viewID - our clickable view ID
        widgetView.setOnClickPendingIntent(R.id.viewID, pIntent);

        appWidgetManager.updateAppWidget(widgetID, widgetView);


    }

Установите период обновления равным 0 в metadata.xml, потому что мы обновляем его вручную

android:updatePeriodMillis="0"

И не забудьте

<uses-permission android:name="android.permission.INTERNET"/>
0 голосов
/ 19 января 2011

установите, что TextView будет активным с помощью TextView.setOnClickListener(this), а затем разрешите вашей активности реализовать интерфейс OnClickListener и определить метод public void onClick(View v).

Внутри метода onClick(View v) сделайте следующее:

public void onClick(View v){
 startActivity(new Intent(Intent.ACTION_VIEW, url));
}

Откроется url в браузере устройства.

У вас также может быть другое действие, которое использует WebView для отображения веб-сайта.

Надеюсь, это было полезно.

0 голосов
/ 16 марта 2011

Полагаю, с тех пор как вы сказали "виджет", что предыдущие ответы не работают для вас.Я в той же лодке - вам, вероятно, потребуется установить ожидающее намерение через API RemoteViews, как здесь (/2162759/kak-realizovat-knopku-na-vidzhete-android) за исключением того, что вы передадите идентификатор textview вместо идентификатора кнопки ... IПодумайте.

Вам не понадобятся причудливые действия с намерением ... просто замените намерение, которое они используют в вызове PendingIntent, на ответ из ответа @ CommonsWare на этот вопрос.

0 голосов
/ 19 января 2011

В основном есть 2 варианта:

  1. Ссылка похожая - создайте связанный TextView, поэтому, нажав на эту ссылку, вы окажетесь (в сети)
  2. Через onClickListener - описано в предыдущем ответе.

Я бы предпочел 1-й подход:

TextView tv=(TextView ) findViewById(R.id.myTextView);
tv.setText(Html.fromHtml("<a href='stackoverflow.com'>Go StackOverFlow!</a>"));
...