在android上检查与服务的互联网连接

时间:2014-03-10 20:31:47

标签: android service

我知道当我的应用程序使用活动打开时如何检查互联网连接。但是,当我的应用未运行时,如何检查服务中的连接性?

3 个答案:

答案 0 :(得分:11)

您可能需要使用广播接收器。您将不断收到连接更新。(已连接/已断开连接)

示例:

<强>清单:

权限:

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

注册广播接收器:

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

创建接收者类:

public class ConnectivityChangeReceiver extends BroadcastReceiver {


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

        // Explicitly specify that which service class will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),
                YourService.class.getName());
        intent.putExtra("isNetworkConnected",isConnected(context));
        startService(context, (intent.setComponent(comp)));
    }

 public  boolean isConnected(Context context) {
           ConnectivityManager connectivityManager = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE));
           NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
           return networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected();
   }

}

您的服务类:

class YourService extends IntentService{

    @Override
    protected void onHandleIntent(Intent intent) {
      Bundle extras = intent.getExtras();
      boolean isNetworkConnected = extras.getBoolean("isNetworkConnected");
      // your code

   }

}

答案 1 :(得分:3)

当网络连接发生变化时,系统会提供Broadcast,您可以使用BroadcastReceiver阅读。无论您的应用是开放还是关闭,都会调用此方式。

答案 2 :(得分:0)

使用以下代码,您可以测试设备是否与互联网连接。 当您尝试呼叫任何Web服务或任何与Internet相关的任务时,您可以随时使用此功能。 您可以在后台运行的android服务中使用此功能。

public boolean isConnectingToInternet(Context _context){
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity != null)
          {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null)
                  for (int i = 0; i < info.length; i++)
                      if (info[i].getState() == NetworkInfo.State.CONNECTED)
                      {
                          return true;
                      }

          }
          return false;
    }