单击Widget不会打开新的活动

时间:2013-03-29 04:36:17

标签: android eclipse

我真的很擅长制作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个小时。没看到我做错了什么。任何帮助都会很棒

2 个答案:

答案 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无法安装。取消选中它是一个图书馆,现在一切都很好。