2014-10-16 103 views
1

我創建了一個簡單的服務,它的工作就是處理來電。我創建了一個服務,如下面在android中創建後臺服務

public class CalldetectorService extends Service { 

private CallHelper callHelper; 

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

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    int res = super.onStartCommand(intent, flags, startId); 
    callHelper = new CallHelper(this); 
    return res; 
} 

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

    //callHelper.stop(); 
} 

}

助手裏面,I M處理呼叫。此服務不會在後臺持續運行。過了一段時間後,它停止了。它工作得很好,當我打開應用程序&移動到背景一段時間後,它不會工作。

如何使我的服務在後臺運行始終,趕上來電

+0

這裏沒有問題 – tyczj 2014-10-16 16:36:24

+0

我用黑體字更新了問題,你能否幫助 – Naruto 2014-10-16 16:39:05

回答

1

如果你不希望服務被操作系統殺死:啓動的服務可以使用用於將服務置於前臺狀態的API,其中系統認爲它是用戶主動注意的內容,因此當內存不足時不會成爲查殺的候選人。 (從目前的前臺應用程序在極端的內存壓力下,該服務在理論上仍然有可能被殺死,但實際上這應該不是問題。)

在您的情況下,'捕捉'來電最好通過一個廣播接收器,在清單上註冊意向:<action android:name="android.intent.action.PHONE_STATE" />

+0

嗨,謝謝。對於撥出電話怎麼樣呢?我還需要在用戶撥號時記錄撥出的電話號碼。對於這個broadcastreceiver不會工作,我猜 – Naruto 2014-10-16 16:53:50

+0

使用廣播接收器,與此作爲意圖過濾器:'' – 2014-10-16 16:54:47

+0

哦,在這種情況下,我的傳入並且可以記錄撥出的電話號碼,而不管我的應用在後臺運行還是不正確。我會試試你的伎倆。謝謝..生病很快回復您 – Naruto 2014-10-16 16:56:38

0

答案是你不,操作系統可以殺死隨時服務,它需要。你可以返回START_STICKY這將標誌着你的服務被重新啓動,當它可以但沒有辦法使服務永遠運行

+0

嗨,謝謝你的回答,請問我的情況如何處理來自我的應用程序的來電事件。 – Naruto 2014-10-16 16:43:07

+0

看這裏http://stackoverflow.com/questions/1853220/retrieve-incoming-calls-phone-number-in-android – tyczj 2014-10-16 16:44:49

+0

謝謝,現在你告訴我使用broadcastreceivers而不是服務對嗎?,我必須編碼處理呼叫,即呼入和呼出。但是,如果我殺了活動,或者如果我把我的活動在後臺進行更長時間,這將無法正常工作。我正在尋求這方面的幫助 – Naruto 2014-10-16 16:47:52