2014-10-16 109 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