2011-07-27 153 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标志......或类似的东西。