2011-01-19 3 views
3

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

ответ

0

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

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

Я предпочитаю 1-й подход:

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

набор, 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

Виджеты для Android построены вокруг AppWidgetProvider, а не Activity. AppWidgetProvider не имеет такого метода, как startActivity (намерение намерения). – Finnboy11

+0

Что я предложил здесь, чтобы позволить Widget быть кликабельным, а затем использовать 'startActivity()', где он обрабатывает щелчок, чтобы запустить намерение открыть URL-адрес. –

+0

. Пожалуйста, взгляните на ответ, который я добавил. Он отличается от того, который у вас есть. Ваш ответ был бы блестящим, если бы это была нормальная активность, но виджеты ведут себя по-другому по сравнению с этим. Извините, но я должен держать этот голос на этом, но не позволяйте этому разрушить ваш день. – Finnboy11

0

Я предполагаю, что вы сказали «виджет», что предыдущие ответы не работают на вас. Я нахожусь в одной лодке - вам, вероятно, нужно будет установить ожидающее намерения с помощью API RemoteViews, как это делается здесь (http://stackoverflow.com/questions/2082998/how-to-implement-a-button- on-an-android-widget), за исключением того, что вы передадите идентификатор textview вместо идентификатора кнопки ... Я думаю.

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

3

Мы не можем использовать onClickListener непосредственно с виджетами. Вместо этого мы должны обернуть наш IntentPendingIntent и 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"/> 
3

Во-первых, установить идентификатор действия.

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(); 
     } 
    } 
} 
+2

Это правильный ответ! –

Смежные вопросы