2015-06-23 67 views
0

我正在開發一個阻止所有撥出呼叫到特定號碼的應用程序。爲此,我在清單文件中註冊了一個接收器。接收器會發現NEW_OUTGOING_CALL意圖。但是,只要我的設備進入睡眠模式,接收器就會停止工作,直到再次打開應用程序時纔會工作。可以告訴我如何解決此問題?謝謝 以下是我的代碼。清單文件中的廣播接收器在一段時間後停止接收

public class Receiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){ 
     String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     if(number.equals("022344")){   
      setResultData(null); 
      Toast.makeText(context, "Call to " + number + " is not allowed!", Toast.LENGTH_LONG).show(); 
     } 

    } 
    // TODO Auto-generated method stub 

} 
+0

使用[服務](http://developer.android.com/reference/android/app/Service.html) – Soham

+0

但你能告訴我爲什麼會發生這種情況的原因嗎? – straberrie

+0

這是「活動」課程還是獨立課程的內部課程? – Squonk

回答

-1

廣播接收器只保證保持手機清醒了的onReceive方法的持續時間。如果你需要做超出這種方法的工作,你需要獲得/管理另一個喚醒鎖。

一個Commonsware庫存在這個用途。看一看:https://github.com/commonsguy/cwac-wakeful/blob/master/README.markdown

this

否則,您必須創建一個擴展Service .The目的是進行長時間運行的操作,而不是與用戶交互,或爲其他應用程序提供功能的類使用。

希望這可以幫助你。

+0

我不希望它在手機處於睡眠模式時工作。我只是希望它在手機再次激活時工作。 – straberrie

+0

@Soham如果你看看代碼,你會發現OP只是在'onReceive()'方法中工作。他只是調用'setResultData()'來阻止某些傳出的呼叫。沒有理由使用「服務」。這段代碼非常好。 –

+0

@DavidWasser我建議使用服務,因爲我想他也想在手機進入睡眠模式後運行它。你可以給這個問題的答案,除了做一些下調之外,他要求的是什麼,這樣我可以學到一些東西。 – Soham