Android 通过单击小部件启动活动
我是Android编程的新手,我试着做一个小部件,可以从ISP那里获得一些关于我帐户的数据。有很多未知的事情如何做,但我做了一些事情-我有一个配置活动的小部件,用户应该在其中键入登录名和密码。小部件将数据存储在SharedPerferences中,当需要更新小部件时,我使用服务启动一个异步任务,以从ISP帐户数据获取数据。现在我想通过点击小部件来启动一个活动。我已经尝试了在这个网站上找到的所有建议,小部件无法启动活动。我的小部件基于放置在此处的另一个小部件。我不明白我应该通过点击我的小部件来改变什么和在哪里开始活动。谢谢 更新: 我的更新功能,我建议我应该放置Pending帐篷Android 通过单击小部件启动活动,android,android-activity,click,widget,Android,Android Activity,Click,Widget,我是Android编程的新手,我试着做一个小部件,可以从ISP那里获得一些关于我帐户的数据。有很多未知的事情如何做,但我做了一些事情-我有一个配置活动的小部件,用户应该在其中键入登录名和密码。小部件将数据存储在SharedPerferences中,当需要更新小部件时,我使用服务启动一个异步任务,以从ISP帐户数据获取数据。现在我想通过点击小部件来启动一个活动。我已经尝试了在这个网站上找到的所有建议,小部件无法启动活动。我的小部件基于放置在此处的另一个小部件。我不明白我应该通过点击我的小部件来改变
@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);
}
我不知道“从另一个小部件创建小部件”。这是我所不知道的,但我建议您构建自己的小部件
除此之外,从小部件调用活动应该使用
下面是一个简单的例子
Intent iSetting = new Intent(this, MyConfig.class);
PendingIntent piSetting = PendingIntent.getActivity(this, 0, iSetting, 0);
views.setOnClickPendingIntent(R.id.IdComponent, piSetting);
或者,您可能需要在小部件的
AppWidgetProvider
类的onUpdate()
方法中查看并使用此代码段:
@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(...);
那次尝试开始服务。祝你好运
参考文献:您现在如何开始活动?粘贴你现在正在做的代码我不好。我的意思是基于另一个小部件而不是创建的。我建议我应该把这个代码放在我的更新函数中?但是我的更新功能已经用来启动一项服务了——它能工作吗?我已经尝试过更改更新功能,但它不起作用。是的,更新方法通常只是启动服务。在服务类本身内部,您可以将这些代码放在onStart上。谢谢,这很有效,我将这5个srings放在onUpdate的循环中,然后单击widget works!真的要开始两项活动吗?我在意向书中只看到一个活动,所以两个活动将如何打开parallely@silverFoxA它不这样做。只打开一个活动。
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);