2012-04-27 48 views
1

我正在尝试构建我的第一个android小部件 - 它是一个简单的图标,当我点击某事时,哼了一声 - “我正在使用服务”。一切都很好,但我有一个小问题,我不明白。这工作得很好:在单独的文件中的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 
    } 
} 

}

这个版本没有工作 - 当我点击小工具图标时,更新服务中的任何方法都不会被调用。问题应该在哪里?

回答

1

如果您移动或重命名服务等级,则需要在您的AndroidManifest.xml中反映此更改。

+0

是啊,我在同一时刻了你编写注意到了这一点;)什么一个愚蠢的错误......我应该在工作中休息一下;)thx,问题解决了 – qkx 2012-04-27 11:11:27

1

添加

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

您的manifest.xml(也许有日子会把你的名字本身之前设置正确的软件包名称)

相关问题