如何在小部件点击上启动网站?

时间:2011-01-19 00:44:16

标签: android url widget onclick

我有一个显示文本字段的基本小部件。我试图找出当用户点击小部件本身时如何启动网站网址。我似乎无法找到任何有关此事的代码。

5 个答案:

答案 0 :(得分:3)

我们无法直接在小部件中使用onClickListener视图。相反,我们应该使用IntentPendingIntentsetOnClickPendingIntent来查看。

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);


    }

在metadata.xml中将更新周期设置为0,因为我们手动更新

android:updatePeriodMillis="0"

不要忘记

<uses-permission android:name="android.permission.INTERNET"/>

答案 1 :(得分: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 :(得分:0)

基本上有两种选择:

  1. 链接相似 - 创建链接的TextView,因此通过单击这些链接,您将在那里(在网络中)
  2. 通过onClickListener - 在之前的回答中描述。
  3. 我更喜欢第一种方法:

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

答案 3 :(得分:0)

我猜是因为你说“小部件”以前的答案不适合你。我在同一条船上 - 您可能需要通过RemoteViews API设置待处理的意图,就像这里所做的那样(http://stackoverflow.com/questions/2082998/how-to-implement-a-button- on-an-android-widget)除了你传入textview ID而不是按钮ID ...我想。

你不应该需要花哨的意图动作......只需将他们在PendingIntent调用中使用的Intent替换为@ CommonsWare对此问题的回答。

答案 4 :(得分:-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显示网站的活动。

我希望它有所帮助。