1

我对制作 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 路径。

当我将小部件导入模拟器时,小部件和应用程序都会下载。我也可以将两者都带到前面的屏幕上。该应用程序按预期工作(单击按钮,转到屏幕)。小部件每秒更新其时间和日期。

但是点击小部件什么也没做。

5 个小时以来一直在看不同的教程。没有看到我做错了什么。任何帮助都会很棒

4

2 回答 2

0

终于弄明白了,有2个大问题。

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)修复后,我被骂说无法安装该应用程序。取消选中它是一个图书馆,现在一切都很好。

于 2013-03-29T08:00:53.673 回答
0

您的 Activity似乎没有构造错误。如果您的 Activity 不是库AppWigetProvider,您会说您得到ClassDefNotFoundException了。所以我猜问题出在您的“意图”上。如果您的 Activity 未在清单中声明,则可能是由于 Activity 名称不正确创建意图的类,或者它可能在另一个包中,您的 AppWidgetProvider 在其中定义。所以我建议创建一个测试活动(在您的 AppWidgetProvider 的包中)并将其设置为“Launcher”,然后尝试打开您的“MainActivity”它。如果任何意图成功打开“MainActivity”,则可能适合在“AppWidgetProvider”中使用意图来创建您的“pendingintent”。

于 2013-03-29T07:42:12.247 回答