1

我正在创建一个后台服务(在它自己的进程中)并且在让它工作时遇到了很多麻烦。我正在尝试在应用程序启动时启动它,并且在日志中出现无法启动服务的意图错误。我一直在浏览论坛、示例(和谷歌),但找不到我做错了什么。

这是我得到的错误:
E/AndroidRuntime(1398): java.lang.RuntimeException: Unable to start service com.test.alarms.AlarmService@41550cb0 with Intent { cmp=xxxx }: java.lang.NullPointerException

在活动中我有:

startService(new Intent(AlarmService.class.getName()));

服务等级是:

package com.test.alarms;


public class AlarmService extends Service{

Context context; 

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
//code to execute when the service is first created
}

@Override
public void onDestroy() {
//code to execute when the service is shutting down
}

@Override
public void onStart(Intent intent, int startid) {
//code to execute when the service is starting up
    Intent i = new Intent(context, StartActivity.class);
    PendingIntent detailsIntent = PendingIntent.getActivity(this, 0, i, 0);

    NotificationManager notificationSingleLine = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Notification notificationDropText = new Notification(R.drawable.ic_launcher, "Alarm for...", System.currentTimeMillis());

    CharSequence from = "Time for...";
    CharSequence message = "Alarm Text";        
    notificationDropText.setLatestEventInfo(this, from, message, detailsIntent);

    notificationDropText.vibrate = new long[] { 100, 250, 100, 500};        
    notificationSingleLine.notify(0, notificationDropText);
}

}

清单文件有:

<service
        android:name=".AlarmService"
        android:process=":remote">
        <intent-filter>
            <action android:name="com.test.alarms.AlarmService"/>
        </intent-filter>
    </service>

谢谢,

4

2 回答 2

5

也许问题是您已经覆盖了 OnCreate 和 OnDestroy,但您没有调用 super.Oncreate() 和 super.onDestroy()。

如果这不起作用,请尝试

startService(new Intent(context , AlarmService.class));

编辑:也在 onStart 中使用它

Intent i = new Intent(this, StartActivity.class);

代替

Intent i = new Intent(context, StartActivity.class);
于 2012-08-25T18:21:12.223 回答
4

根据文档,您需要在 onStartCommand(Intent intent,int,int);

更好的设计,

public int onStartCommand(Intent intent, int flags, int startId) {
    if(intent != null){
        handleCommand(intent);
    }
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

在这里阅读更多

于 2013-11-12T15:56:15.363 回答