2012-02-26 33 views
0

在我的應用程序中,我有一個服務可以更新所有GUI元素。所以我需要將我的服務註冊到CONNECTIVITY_CHANGE_ACTION。這樣它就可以通知所有活動來更新GUI,只要它收到任何連接更新爲廣播。ANDROID:如何註冊服務中的連接更改?

爲了實現這個目標,我在我的服務中宣佈了一個公共成員類廣播接收器。以下是代碼片段。

public class BkgService extends Service{ 

public class ConnectionUpdater extends BroadcastReceiver{ 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      NetworkInfo info = (NetworkInfo) ((ConnectivityManager) context 
.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 

      if (info == null || !info.isConnected()) { 

      } 
      else{ 
       cd.setIsOnline(true,context); 
      } 

      Intent intent1 = new Intent(); 
      intent1.setAction(ACTION_GUI_UPDATE); 
      sendBroadcast(intent1); 
     } 

} 

在我的清單文件我聲明如下

<service android:name=".BkgService" /> 

<receiver android:name="BkgService.ConnectionUpdater"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

我沒有得到任何錯誤這一點。但是當我啓用/禁用虛擬設備中的3G數據時,我沒有得到任何廣播更新。請提出可能出錯的地方?我以正確的方式做這件事嗎?

回答

1

的Try ...

<receiver android:name=".BkgService$ConnectionUpdater"> 

BkgService之前錯過了.和內部類的名字應該從主類與$標誌分開。

+0

感謝您的建議。我做了必要的修改。我正在播放。但是我收到廣播後立即崩潰。這是我得到的錯誤:02-26 04:48:04.081:E/AndroidRuntime(1222):java.lang.RuntimeException:無法實例化接收器mt.android.app.BkgService $ ConnectionUpdater:java.lang.InstantiationException:mt .android.app.BkgService $ ConnectionUpdater – 2012-02-26 04:51:31

+0

您的異常的原因可能是您的內部類不是靜態的,因此它在實例化時需要對外部類的引用。因此,Android Runtime無法在不傳遞對外部類的引用的情況下創建實例。嘗試將內部類聲明爲「static」。 – 2014-05-04 14:06:06

相關問題