2011-10-04 71 views
2

我想开发一个接收机类,它将监听手机状态。我想使用传入的电话号码在doSomething()上工作。BroadCastReceiver收听来电并在时间间隔之间工作

而我的需要是我的接收器应该在一定的时间间隔内工作(比如12:30 PM到01:00 PM),除了这个时间间隔我的接收器不应该工作。

我所做的尚未:

这是我的广播接收器类:

public class MyTest extends BroadcastReceiver { 
    protected AudioManager audioManager;// = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
    protected Context context; 
    private ITelephony telephonyService; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     this.context = context; 
     String action = intent.getAction(); 
      if(action.equalsIgnoreCase("android.intent.action.PHONE_STATE")){ 
       if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
            TelephonyManager.EXTRA_STATE_RINGING)) { 
        //Incoming call 
       doSomething(intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)); 
       }   
      } 
      else { 

      Bundle bundle = intent.getExtras(); 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      SmsMessage message = SmsMessage.createFromPdu((byte[])pdus[0]); 
      if(!message.isEmail()) 
       doSomething(message.getOriginatingAddress()); 

      } 

    } 
} 

,我使用它作为我的活动:

registerReceiver(new MyTest(), new IntentFilter("android.intent.action.PHONE_STATE")); 

在清单我declaired它作为

<receiver android:name=".MyTest"></receiver> 

问题:

它,如果我的应用程序在前台运行,但是当我关闭我的应用程序它不工作的工作。 我没有在onPause()或Activity生命周期的其他方法上编写任何代码。

我在做什么错了?有没有其他办法呢?

回答

3

填写您的接收器在你这样的清单文件:

<receiver android:name=".PhoneStateReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 
+0

我怎么能注销吗? –

+0

与清单,你不能,但你可以把你的onReceive方法检查,以执行您的任务,根据您的条件....... –

+0

如果我不想打电话给接听电话,那么在那里具体意图是什么? – Adithya