Android 单击Widget不会打开新活动
我对制作Android应用程序真的很陌生;只是试着制作一个简单的小部件,告诉时间。如果你点击这个小部件,它也会打开一个基本的活动。小部件和活动位于同一工作区中的两个不同项目文件中,因此我必须将活动包导入以访问其类 完整代码:Android 单击Widget不会打开新活动,android,eclipse,Android,Eclipse,我对制作Android应用程序真的很陌生;只是试着制作一个简单的小部件,告诉时间。如果你点击这个小部件,它也会打开一个基本的活动。小部件和活动位于同一工作区中的两个不同项目文件中,因此我必须将活动包导入以访问其类 完整代码: public class FirstWidget extends AppWidgetProvider { RemoteViews view = null; public void onUpdate(Context context, AppWidgetManager ap
public class FirstWidget extends AppWidgetProvider {
RemoteViews view = null;
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
view = new RemoteViews(context.getPackageName(), R.layout.main);
view.setOnClickPendingIntent(R.id.widget_textview, pendingIntent);
appWidgetManager.updateAppWidget(new ComponentName(context, FirstWidget.class), view);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000);
}
private class MyTime extends TimerTask {
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());
public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
thisWidget = new ComponentName(context, FirstWidget.class);
}
public void run() {
Calendar cal = format.getCalendar();
int day = cal.get(Calendar.DAY_OF_WEEK);
switch (day) {
case(2):
view.setTextViewText(R.id.widget_textview, "MONDAY TIP " + format.format(new Date()));
break;
case(3):
view.setTextViewText(R.id.widget_textview, "TUESDAY TIP " + format.format(new Date()));
break;
case(4):
view.setTextViewText(R.id.widget_textview, "WEDNESDAY TIP " + format.format(new Date()));
break;
case(5):
view.setTextViewText(R.id.widget_textview, "THURSDAY TIP " + format.format(new Date()));
break;
case(6):
view.setTextViewText(R.id.widget_textview, "FRIDAY TIP " + format.format(new Date()));
break;
case(7):
view.setTextViewText(R.id.widget_textview, "SATURDAY TIP " + format.format(new Date()));
break;
case(1):
view.setTextViewText(R.id.widget_textview, "SUNDAY TIP " + format.format(new Date()));
break;
}
appWidgetManager.updateAppWidget(thisWidget, view);
}
}
}
我在Eclipse中将该活动设置为一个库,并通过Properties->Android->Library将其同步到小部件。还通过属性->Java构建路径->活动包将活动添加到小部件的Java构建路径
当我将小部件导入emultaor时,小部件和应用程序都会被下载。我也可以将两者都带到前屏幕。应用程序按预期工作单击按钮,进入屏幕。小部件每秒更新其时间和日期
但是点击这个小部件什么也做不了
已经看了5个小时不同的教程了。不知道我做错了什么。任何帮助都会很好您的AppWigetProvider中似乎没有构造错误。您说如果您的活动不是库,您会得到ClassDefNotFoundException。所以我猜问题在于您的意图。这可能是由于您的活动未在清单中声明,或者创建意图时活动类的名称不正确,也可能是在另一个包中定义了AppWidgetProvider。因此,我建议在AppWidgetProvider的包中创建一个测试Activityin并将其设置为Launcher,然后尝试从中打开MainActivity。如果有任何意图成功打开MainActivity,在AppWidgetProvider中使用它来创建您的PendingEvent可能是合适的选择。最终解决了这个问题,有两个主要问题 1我的小部件清单需要说明应用程序的所有活动,而不仅仅是主页我的应用程序有2页
<activity android:name="com.example.aubreysapp.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.aubreysapp.DisplayMessageActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2解决了这个问题后,我被大骂该应用程序无法安装。取消选中它是一个库,现在一切都很好。如果您不使用库直接将其添加到项目中,您的活动是否会打开?否。我尝试了这一点,但当小部件尝试查找我的.class活动时,它会中断,即使它已导入并且Eclipse对此没有问题。您在Logcat中是否收到任何错误或警告?这两个活动都在库中或包中?在这样的设置中不会出现,如果您的活动是库中的,则不会出现错误?