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