AlarmManager无法启动服务

时间:2011-11-28 05:41:40

标签: java android service alarmmanager

我只是遵循API Demo中的确切代码,但在设置AlarmManager后我的服务才会启动。

所以我的服务是

public class CourseWatcherRefreshService extends Service {

    private CourseDbAdapter mDbHelper;
    private CourseWatcher watcher;

    @Override
    public void onCreate() {
        Toast.makeText(this, "Watcher Refresh Service starts", Toast.LENGTH_SHORT).show();
        mDbHelper = new CourseDbAdapter(this);
        mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        mDbHelper.open();
        Thread thread = new Thread(null, mTast, "CourseWatcherRefreshService");
        thread.start();
        super.onCreate();

    }

    @Override
    public void onDestroy() {
        mDbHelper.close();
        super.onDestroy();

    }

    Runnable mTast = new Runnable() {
        // some work
    };

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    private final IBinder mBinder = new Binder() {
        @Override
        protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
                throws RemoteException {
            return super.onTransact(code, data, reply, flags);
        }
    };

}

同样在我的AndroidManifest.xml中,我放了这样的代码

<service
    android:name=".CourseWatcherRefreshService"
    android:process=":remote" >
</service>

我使用这样的代码来切换AlarmManager

PendingIntent refreshIntent = PendingIntent.getActivity(NaviScreen.this, 0, new Intent(NaviScreen.this, CourseWatcherRefreshService.class), 0);
long firstTime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime, 30*1000, refreshIntent);

上面的代码与API Demo中的AlartService示例几乎相同,但我的代码不起作用,我看不到任何服务开始工作的迹象。

2 个答案:

答案 0 :(得分:6)

当您使用getActivity时,您正在使用getService。因此,将PendingIntent行更改为

PendingIntent refreshIntent = PendingIntent.getService(NaviScreen.this, 0, new Intent(NaviScreen.this, CourseWatcherRefreshService.class), 0);

答案 1 :(得分:1)

试试这个:

Intent updateIntent = new Intent() 
updateIntent.setClass(NaviScreen.this, CourseWatcherRefreshService.class) 
PendingIntent pendingIntent = PendingIntent.getService(this, 0, updateIntent, 0);