1

私は最初の Android ウィジェットを作成しようとしています。これは単純なアイコンで、クリックすると何かが発生します。「何か」でサービスを使用しています。すべてがうまくいっていますが、私には理解できない小さな問題があります。これはうまくいきます:

CLASS MYWIDGET.JAVA
------------------------------------------------
public class MyWidget extends AppWidgetProvider {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction() == null) context.startService(new Intent(context, UpdateService.class));
    else super.onReceive(context, intent);
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    context.startService(new Intent(context, UpdateService.class));
}

public static class UpdateService extends IntentService {

    public UpdateService() {
        super("MyWidget$UpdateService");
    }

    @Override
    protected void onHandleIntent(Intent arg0) {
        ComponentName me = new ComponentName(this, MyWidget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(me, buildUpdate(this));
    }

    private RemoteViews buildUpdate (Context context) {
        // i'm doing something here
    }
}

}

しかし、UpdateServiceを別のファイルに抽出すると機能しません:

CLASS MYWIDGET.JAVA
------------------------------------------------
public class MyWidget extends AppWidgetProvider {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction() == null) context.startService(new Intent(context, UpdateService.class));
    else super.onReceive(context, intent);
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    context.startService(new Intent(context, UpdateService.class));
}

}

CLASS UPDATESERVICE.JAVA
-------------------------------
public class UpdateService extends IntentService {

    public UpdateService() {
        super("UpdateService");
    }

    @Override
    protected void onHandleIntent(Intent arg0) {
        ComponentName me = new ComponentName(this, MyWidget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(me, buildUpdate(this));
    }

    private RemoteViews buildUpdate (Context context) {
        // i'm doing something here
    }
}

}

このバージョンは機能しません。ウィジェット アイコンをクリックすると、更新サービスのメソッドが呼び出されません。問題はどこにありますか?

4

2 に答える 2

1

サービス クラスを移動または名前変更する場合は、この変更を に反映する必要がありますAndroidManifest.xml

于 2012-04-27T11:06:35.163 に答える
1

追加

<service android:name=".UpdateService" />

あなたのmanifest.xmlに(名前自体の前に正しいパッケージ名を設定する必要があるかもしれません)

于 2012-04-27T11:51:51.830 に答える