0

我有一个AppWidgetProvider应该触发服务以便在 App Widget 上执行请求的更新。

关键是服务UpdateService显然永远不会启动。事实上,我已经在onStartCommand服务中添加了一个日志,我可以看到它onStartCommand永远不会被调用。

请注意,我的应用程序中有两个服务:

<service android:name="ScheduledService" />

<service android:name="UpdateService" />

非常感谢任何帮助。谢谢

这是我的相关代码:

public class AppWidget extends AppWidgetProvider {

@Override
public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds) {
    Intent i = new Intent(ctxt, UpdateService.class);
    i.putExtra("widgetsids", appWidgetIds);
    Log.e("","onUpdate di AppWidget");

    // --> HERE I TRY TO START THE SERVICE <--
    ctxt.startService(i);
}

public static class UpdateService extends Service {


        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

        // --> onStartCommand NEVER GEST CALLED <---

        Log.e("","onStartCommand di AppWidget");
        int[] appWidgetIds = intent.getIntArrayExtra("widgetsids");
        final int N = appWidgetIds.length;
        AppWidgetManager manager = AppWidgetManager.getInstance(this);

        // Perform this loop procedure for each App Widget that belongs to
        // this provider

        for (int i = 0; i < N; i++) {
            int appWidgetId = appWidgetIds[i];

            RemoteViews view = buildUpdate(getApplicationContext(),
                    appWidgetId);

            // Tell the AppWidgetManager to perform an update on the current
            // app widget
            manager.updateAppWidget(appWidgetId, view);

        }
        return (START_NOT_STICKY);

    }

这是我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stocktickerwidget"
android:versionCode="1"
android:versionName="1" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" />

<application
    android:debuggable="true"
    android:icon="@drawable/ic_launcher"
    android:label="TestWidget" >
    <receiver
        android:name=".AppWidget"
        android:icon="@drawable/cw"
        android:label="AppWidget" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widget_provider" />
    </receiver>

    <activity
        android:name=".WidgetActivity"
        android:theme="@android:style/Theme.NoDisplay" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name="PollReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <service android:name="ScheduledService" />

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

4

1 回答 1

2

在您的清单中,尝试包含包名称,例如:

<service android:name="com.mypackage.ScheduledService" />

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

否则,请确保调用您的 onUpdate 方法。

编辑:当您将服务放在单独的文件中时,以上适用。由于您将其作为嵌套类包含在内,因此您可以编写:

<service android:name=".AppWidget$UpdateService" />
于 2013-03-17T15:57:51.320 回答