Android 在服务内部实现广播接收器

Android 在服务内部实现广播接收器,android,service,broadcastreceiver,internet-connection,Android,Service,Broadcastreceiver,Internet Connection,我想在我的Android应用程序运行期间检查互联网连接。我尝试使用服务,但似乎这不是最好的选择。我是否有任何可能的方法在服务中实现广播接收器?或者我必须放弃该服务而单独使用广播接收器吗?我将向您展示如何在服务中创建SMS接收器: public class MyService extends Service { @Override public void onCreate() { BwlLog.begin(TAG); super.onCreate(); SMSrecei

我想在我的Android应用程序运行期间检查互联网连接。我尝试使用服务,但似乎这不是最好的选择。我是否有任何可能的方法在服务中实现广播接收器?或者我必须放弃该服务而单独使用广播接收器吗?

我将向您展示如何在服务中创建SMS接收器:

public class MyService extends Service {

@Override
public void onCreate() {
    BwlLog.begin(TAG);
    super.onCreate();

    SMSreceiver mSmsReceiver = new SMSreceiver();
    IntentFilter filter = new IntentFilter();
    filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
    filter.addAction(SMS_RECEIVE_ACTION); // SMS
    filter.addAction(WAP_PUSH_RECEIVED_ACTION); // MMS
    this.registerReceiver(mSmsReceiver, filter);

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    return START_STICKY;
}

   /**
 * This class used to monitor SMS
 */
class SMSreceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (TextUtils.equals(intent.getAction(), SMS_RECEIVE_ACTION)) {
             //handle sms receive
        }
    }
}

您无需为此使用
服务
广播接收器
。每次需要ping服务器时,只需检查连接状态

您可以编写一个方法来检查这一点,并根据连接状态返回一个
布尔值(真/假)。
下面的方法也是如此

public static boolean isNetworkAvailable(Context mContext) {

        try {
            final ConnectivityManager conn_manager = (ConnectivityManager) mContext
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            final NetworkInfo network_info = conn_manager
                    .getActiveNetworkInfo();

            if (network_info != null && network_info.isConnected()) {
                if (network_info.getType() == ConnectivityManager.TYPE_WIFI)
                    return true;
                else if (network_info.getType() == ConnectivityManager.TYPE_MOBILE)
                    return true;
            }

        } catch (Exception e) {
            // TODO: handle exception
        }
        return false;

    }

每秒钟检查一次连接是不明智的。或者,您可以收听操作(ConnectivityManager.CONNECTIVITY\u操作)并确定是否连接到活动网络

IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
此外,您还可以检查当前活动的网络类型(WIFI类型、MOBILE类型)


这样,您就不需要每秒都在检查连接的服务。

为什么要使用连接签入服务?为什么不在每个http/https请求上发表评论呢?谢谢@Pankaj Kumar;实际上它是在线流媒体,所以需要保持每秒检查连接感谢@AndroidEnthusiast;在我的代码中,我总是使用internet连接,实际上它是在线流媒体,所以需要保持每秒检查连接,我将尝试使用此结构。。谢谢一个lot真的很有用谢谢我也需要在清单文件中声明我的接收人吗?@Alexanchez你不需要在最主要的文件中声明它好的,我知道我在这里问得很晚了,但是如果我需要将onReceive的结果发送回服务怎么办?我一直在努力解决这个问题,运气不好!我想这会有帮助。如果您能让我参考一些示例代码,这将更有帮助。谢谢你会参考这个,非常感谢