您好我在启动IntentService作为前台服务时遇到了问题。不幸的是,官方教程并没有告诉我太多,因为有些方法不存在,有些方法已被弃用,而且还没有说它们提供的代码放在哪里。
我创建了自己的IntentService,并且已经覆盖了onCreate方法。它看起来如下:
@Override
public void onCreate(){
super.onCreate();
Intent notificationIntent = new Intent(this, Settings.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new Notification.Builder(this)
.setContentTitle(getText(R.string.serviceName))
.setContentText(getText(R.string.serviceDescription))
.setSmallIcon(R.mipmap.ic_launcher)
.setOngoing(true)
.setContentIntent(pendingIntent)
.build();
startForeground(101, notification);
我知道这不是调试网站,但肯定有一些明显的东西,我错过了。 Settings类是我的Activity类,从中调用了startService,我还为通知设置了所有需要的东西,并使用非零的第一个参数调用了startForeground。仍然没有通知,虽然我很确定,该服务正在后台工作。
任何帮助都会受到赞赏(顺便说一句。我已经在前台搜索了SO SOoth服务的不同主题,但没有任何帮助。)
答案 0 :(得分:1)
如果您使用Service
代替IntentService
,则可以将您编写的代码置于构建通知& startForeground()
中的onStartCommand
:
public class SettingsService extends Service {
private final IBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder {
public SettingsService getService() {
return SettingsService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
stopForeground(true);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent notificationIntent = new Intent(this, SettingsService.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new Notification.Builder(this)
.setContentTitle("myService")
.setContentText("this is an example")
.setSmallIcon(R.mipmap.ic_launcher)
.setOngoing(true)
.setContentIntent(pendingIntent)
.build();
startForeground(101, notification);
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
}
另外,在onStartCommand
中,如果您不想在服务被删除时重新创建服务,则返回START_NOT_STICKY
,否则返回START_STICKY