我真的很擅长制作Android应用;只是想制作一个告诉时间的简单小部件。如果单击它,小部件也将打开基本活动。 Widget和Activity位于2个不同的项目文件中(在同一个工作区中),因此我必须导入Activity包以访问其类。
整个代码:
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中创建了一个Activity,并通过Properties-> Android-> Library将其同步到Widget。还通过Properties-> JAva Build Path-> Activity Package将Activity添加到Widget的Java Build路径。
当我将Widget导入到emultaor时,Widget和App都会被下载。我也可以把它们都带到前面的屏幕上。应用程序按预期工作(单击按钮,转到屏幕)。 Widget每秒都会更新它的时间和日期。
但是点击小部件什么都不做。
现在正在查看不同的教程5个小时。没看到我做错了什么。任何帮助都会很棒
答案 0 :(得分:0)
您的AppWigetProvider
似乎没有施工错误。如果您的活动不是库,您会说ClassDefNotFoundException
。所以我猜问题与您的“意图”有关。可能是如果您的活动未在清单中声明,活动类的名称在创建意图时不正确,或者它可能在另一个包中,您的AppWidgetProvider已在其中定义,则会导致。所以我建议创建一个测试活动(在AppWidgetProvider的包中)并设置它作为“Launcher”然后尝试从它打开你的“MainActivity”。如果任何意图成功打开“MainActivity”,可能适合在“AppWidgetProvider”中使用它来创建你的“pendingintent”。
答案 1 :(得分:0)
最后想出来,有两个主要问题。
1)我的Widget的清单需要说明应用程序的所有活动,而不仅仅是主页面(我的应用程序有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)经过修复后,我大吼大叫说App无法安装。取消选中它是一个图书馆,现在一切都很好。