【问题标题】:Android services in separate file don't work单独文件中的 Android 服务不起作用
【发布时间】:2012-04-27 10:57:09
【问题描述】:

我正在尝试构建我的第一个 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
    }
}

}

这个版本不起作用 - 当我点击小部件图标时,更新服务中的任何方法都不会被调用。应该是哪里出了问题?

【问题讨论】:

    标签: java android android-widget android-service


    【解决方案1】:

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

    【讨论】:

    • 是的,我在你写的同一时刻注意到了这一点;)多么愚蠢的错误……我应该在工作中多休息;)谢谢,问题解决了
    【解决方案2】:

    添加

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

    到您的 manifest.xml(也许您必须在名称本身之前设置正确的包名称)

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 1970-01-01
      • 2021-08-29
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2017-11-30
      相关资源
      最近更新 更多