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);
    }
}
}

Activity を Eclipse のライブラリにし、[プロパティ] -> [Android] -> [ライブラリ] を介してウィジェットに同期しました。また、[プロパティ] -> [JAva ビルド パス] -> [アクティビティ パッケージ] を介して、アクティビティをウィジェットの Java ビルド パスに追加しました。

ウィジェットを emultaor にインポートすると、ウィジェットとアプリの両方がダウンロードされます。両方をフロントスクリーンに持ってくることもできます。アプリは意図したとおりに動作します (ボタンをクリックして画面に移動します)。ウィジェットは、その時刻と曜日を毎秒更新します。

しかし、ウィジェットをクリックしても何も起こりません。

現在、5 時間にわたってさまざまなチュートリアルを見ています。私が間違っていることを見ていない。どんな助けでも素晴らしいでしょう

4

2 に答える 2

0

あなたには構築エラーがないようです.そして、あなたのアクティビティがライブラリではない場合AppWigetProviderに得られるとあなたは言います.だから私はあなたの「意図」について問題があると思います.ClassDefNotFoundExceptionインテントを作成するクラス、または AppWidgetProvider が定義されている別のパッケージにある可能性があります。そのため、(AppWidgetProvider のパッケージ内に) テスト アクティビティを作成し、それを「ランチャー」として設定してから、「MainActivity」を開こうとすることを提案します。 it.「MainActivity」を開くことに成功したインテントは、「AppWidgetProvider」で使用して「保留中のインテント」を作成するのに適したインテントである可能性があります。

于 2013-03-29T07:42:12.247 に答える
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 に答える