前景

时间:2016-07-21 19:59:03

标签: android service

您好我在启动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服务的不同主题,但没有任何帮助。)

1 个答案:

答案 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