2011-10-04 73 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