2011-07-27 205 views
0

我正在一個服務內部實施廣播接收器,該服務應該是監聽互聯網連接的可用性。該服務從應用程序的主要活動開始。問題是廣播監聽器實際上並沒有聽任何東西。我的代碼是:從服務的互聯網連接的廣播接收器

public class MyService extends Service { 

public final static String SEND_DATA_BROADCAST = "com.myapp.SEND_DATA"; 
private final static String LOG_TAG="-Service-"; 
private BroadcastReceiver updateListener; 

@Override 
public void onCreate() 
{ 
    super.onCreate(); 

    //create listener 

    final IntentFilter theFilter = new IntentFilter(); 
     theFilter.addAction(SEND_DATA_BROADCAST); 
     this.updateListener = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // Do whatever you need it to do when it receives the broadcast 
       // Example show a Toast message... 
       Log.d(LOG_TAG,"Listening.."); 
      } 
     }; 

    // register listener 
    Log.d(LOG_TAG,"Registering Listener"); 
    this.registerReceiver(this.updateListener, theFilter); 
    listenerRegistered = true; 
    Log.d(LOG_TAG,"Listener Registered"); 
} 

回答

0

你應該打破你的BroadcastReceiver出到自己的類,並且在您的清單中註冊。否則,直到您的Service啓動後纔會註冊。關於這樣做的更多細節可以在這裏找到:http://developer.android.com/reference/android/content/BroadcastReceiver.html

如果沒有關於「廣播監聽程序無法正常工作」的含義的詳細說明,它很難提供幫助。

+0

我甚至沒有從logcat得到任何東西來暗示監聽器實際上做了些什麼。 – JustCurious

+0

所以你說它永遠不會收到SEND_DATA_BROADCAST?這是什麼時候發送的?你確定你的服務即將開始嗎?您已將其設置爲自定義字符串,因此它不是系統廣播的事件。這些列表可以在這裏找到:http://developer.android.com/reference/android/content/Intent.html – elevine

+0

你也可能對這個類中的一些廣播常量感興趣:http:// developer。 android.com/reference/android/net/ConnectivityManager.html – elevine

1

我做了快速搜索所有可用的意圖的,似乎你正在嘗試做的,不能認定爲意圖(從而通過廣播接收器檢測)

嘗試使用類PhoneStateListener。

應該有很多使用那個類的例子,你應該尋找這個onDataConnectionStateChanged()回調方法,以及這個LISTEN_DATA_CONNECTION_STATE標誌......或類似的東西。