单击小部件启动活动

时间:2012-07-19 04:46:31

标签: android android-activity click widget

我在编程Android的新手,我尝试做一个小部件,它可以从ISP获取有关我的帐户的一些数据。有很多未知的事情如何做,但我做了一些事情 - 我有一个配置活动的小部件,用户应该键入登录名和密码。窗口小部件将数据存储在SharedPerferences中,当需要更新窗口小部件时,我使用服务启动AsyncTask以从ISP获取帐户数据。现在我想通过点击小部件来开始一项活动。我已经尝试了我在这个网站上找到的所有建议,而且widget无法启动活动。我的小部件基于放在这里的另一个小部件https://github.com/Arturus/MetrikaWidget。我不明白我应该通过点击我的小部件来改变什么以及在哪里开始活动。感谢。

更新: 我的更新功能,我建议我应该放置PendingIntent

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
    Log.d(TAG, "onUpdate");

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

    /* An updateAppWidget functions looks like as:

    Intent intent = new Intent(context, UpdateWidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
    context.startService(intent);
    */

    Intent intent = new Intent(context, DetailedStatActivity.class);
    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

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

    views.setOnClickPendingIntent(R.id.layout, pendingIntent);

    ComponentName componentName = new ComponentName(context.getPackageName(), WidgetProvider.class.getName());

    appWidgetManager.updateAppWidget(componentName, views);
}

3 个答案:

答案 0 :(得分:56)

在小部件onUpdate()类的AppWidgetProvider方法中使用此代码段:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
    Intent configIntent = new Intent(context, Activity.class);

    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);

    remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent);
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}     

此处widgetlayout是窗口小部件布局的名称,R.id.widget是它的父布局ID。

修改
现在,我看到你添加到问题中的代码。你会这样做:

PendingIntent.getActivity(context, 0, configIntent, 0);

(开始的活动)而不是

PendingIntent.getService(...);

尝试开始服务。祝你好运。

参考文献:
doityourselfandroid.com

helloandroid.com

答案 1 :(得分:9)

Intent inet = new Intent(your_action);
inet.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntentNetworkInfo = PendingIntent.getActivity(context, 2, 
            inet, Intent.FLAG_ACTIVITY_NEW_TASK);
remoteViews.setOnClickPendingIntent(you_component_when_the_user_pressing_this_activity_should_start, pIntentNetworkInfo);

答案 2 :(得分:2)

我不知道“从另一个小部件创建小部件”。这是我所不知道的,但我建议您构建自己的小部件。

除此之外,从小部件调用活动应使用PendingIntent

这是一个简单的例子

Intent iSetting = new Intent(this, MyConfig.class);
PendingIntent piSetting = PendingIntent.getActivity(this, 0, iSetting, 0);
views.setOnClickPendingIntent(R.id.IdComponent, piSetting);

或者您可能需要查看this linkthis link