2013-10-16 21 views
0

我是新来的android编程。我有一个使用BroacastReciever拦截来电的程序。当我启动我的应用程序时,它开始工作。现在的问题是,当我重新启动我的android手机,这个BroadcastReciever不起作用。所以我假设我需要为此提供服务。但我不知道什么时候开始服务以及从哪里开始BroadcastReciever。如何让BroadcastReciever在重新启动后工作?

BroadcastReciever码 -

public class CallInterceptor extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    Toast.makeText(context, "Service started", Toast.LENGTH_LONG).show(); 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     String state = extras.getString(TelephonyManager.EXTRA_STATE); 
     Toast.makeText(context, "Phone is " + state, Toast.LENGTH_LONG).show(); 
     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      String phoneNumber = extras 
        .getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
      Toast.makeText(context, "Call from " + phoneNumber, Toast.LENGTH_LONG).show(); 
      //sendSMS(phoneNumber); 

      //toggle ringer mode 
      AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
      toggleMode(am); 
     } 

    } 

} 

AndroidManifest文件 -

<receiver android:name="com.nagarro.service.CallInterceptor" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" > 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       </action> 
      </intent-filter> 
     </receiver> 

我不认为<action android:name="android.intent.action.BOOT_COMPLETED" />工作。

此外,有没有可能做到这一点没有服务?请建议方法,这将帮助我拦截呼叫加班(即使在重新启动后)。

回答

1

您错误地关闭了您的第一个动作标签。

<receiver android:name="com.nagarro.service.CallInterceptor" > 
    <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

此外,您使用的不是服务:您接收机部分应该像看。您正在使用广播接收器。 见本页的基本知识Application Fundamentals.

+0

感谢您的标记更正...我知道我没有使用服务,但我的问题是,这段代码是否足够或我需要提供服务? –

+0

感谢Mike ..我的代码现在正确地运行正确后,该标签.. –

+0

其实我打算在后台永远运行这个BroacastReciever ...这是一个问题吗? –

相关问题