2012-02-26 13 views
0

私のアプリケーションでは、すべてのGUI要素の更新を行う単一のサービスがあります。 CONNECTIVITY_CHANGE_ACTIONにサービスを登録する必要があります。ブロードキャストとして接続更新を受信するたびにGUIを更新するようにすべてのアクティビティに通知することができます。アンドロイド:サービスからの接続変更を登録するには?

これを達成するために、私は自分のサービスでパブリックメンバークラスのブロードキャストレシーバを宣言しました。以下はコードスニペットです。私のマニフェストファイルの

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

はあなたがBkgService.を逃し、内部クラス名は$記号でメインクラスから分離されなければならない...

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

を試してみてください。

+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 –

+0

あなたの例外の理由は、あなたの内部クラスが静的でないかもしれないので、インスタンス化されるときに外部クラスへの参照を取ります。したがって、Androidランタイムは外部クラスへの参照を渡さずにインスタンスを作成することはできません。内部クラスを '' static''として宣言してみてください。 –

関連する問題