2016-07-21 59 views
0

您好我有問題啓動IntentService作爲前臺服務。不幸的是,官方教程並沒有告訴我很多方法不存在,有些已被棄用,而且也沒有說它們提供的代碼的放置位置。前景中的Android 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 woth服務不同的主題,但沒有幫助。)

+0

你的用例是什麼讓它在前臺? – apelsoczi

+0

應用程序是:你設置一些設置即。電話號碼。從設置活動中,按下啓動按鈕,服務啓動並監聽一些事件,如果發生事件,服務會發出呼叫(例如,在電話發起動作時有用,但它獨自留在家中)。我希望通知用戶,該服務處於活動狀態。您可以從設置活動中禁用服務。 – DawidPi

+0

由於一個IntentService是onHandleIntent後立即銷燬()完成後,你可能不希望一個IntentService – ianhanniballake

回答

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); 
    } 
} 

Additionnaly,在onStartCommand,返回START_NOT_STICKY如果你不想當它被殺死否則返回重新創建服務