Обнаружение интернет-соединения в android

У меня есть приложение в андроиде, которое является своего рода клиентской стороной TCP / IP-соединения … это приложение использует прием GPS-данных от поставщика GPS и отправку его на серверную часть моего TCP / IP-соединения.

Только это, когда нет подключения к Интернету данных GPS, я должен хранить его в БД …. и как только я снова подключу к Интернету, мне нужно снова начать клиентскую сторону и снова подключиться к моему серверу и отправить данные.

Вопрос: 1.Как я могу обнаружить подключение к Интернету в android? (Мое приложение работает на эмуляторе)

2. Возможно ли, как только я обнаруживаю подключение к Интернету, чтобы попросить моего клиента потока подключиться к серверу ???

Вот схема моего кода:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.client); lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationListener = new MyLocationListener(); cThread = new Thread(new ClientThread(syncToken)); cThread.start(); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); } 

 public void onLocationChanged(Location loc) { if (loc != null) { latitude = (int) (loc.getLatitude() * 1E6); longitude = (int) (loc.getLongitude() * 1E6); } } GeoPoint p = new GeoPoint(latitude, longitude); // geoPointsArray.add(p); db.insertData1(longitude, latitude); } 

 public class ClientThread implements Runnable { Object syncToken; public void run() { try { InetAddress serverAddr = InetAddress.getByName(serverIpAddress); socket = new Socket(serverAddr, 7001); Log.d(" ", "Clientul sa conect"); } catch (UnknownHostException e) { System.err.println("Don't know about host"); } catch (IOException e) { System.err .println("Couldn't get I/O for the connection to host"); } try { os = new ObjectOutputStream(socket.getOutputStream()); } catch (IOException e) { System.out.println(e); } while (true) { synchronized (syncToken) { try { syncToken.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } if (socket != null && os != null) { try { //send data through the socket }catch (Exception e){ e.printStackTrace(); } i++; } } } } 

РЕДАКТИРОВАТЬ:

Вот что я сделал:

 private NetworkStateReceiver mNetSateReceiver = null; private class NetworkStateReceiver extends BroadcastReceiver { @Override public void onReceive( Context context, Intent intent ) { ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info =connectivity.getActiveNetworkInfo();; if (info != null && info.isConnectedOrConnecting()) { System.out.println(" internet connection!"); } else System.out.println("no internet connection"); } } 

 onCreate(){ registerReceiver( mNetSateReceiver, new IntentFilter( ConnectivityManager.CONNECTIVITY_ACTION ) ); syncToken = new Object(); cThread = new Thread(new ClientThread(syncToken)); cThread.start(); } 

  public void onDestroy(){ super.onDestroy(); db.close(); unregisterReceiver( mNetSateReceiver ); } 

Я понимаю, что каждый раз, когда мое соединение состояния меняет мой onReceive (), вызывается … это означает, что я должен начать свой поток в onReceive (), когда есть интернет-соединение ????

Я немного смущаюсь, если у меня может немного разобраться в этом для меня … и где я должен начать это намерение, что ты говоришь мне? Спасибо

Эта тема отвечает на ваш вопрос

Что касается чего-то, что происходит, когда оно происходит. Затем вы можете повысить намерение трансляции и получить намерение посредством активности, которая будет выполнять обновление после того, как будет доступен интернет

Надеюсь, это поможет

Редактировать: трансляция намерения я имел в виду нечто подобное. Я не уверен, что это лучшее решение для кого-то другого.

Следующая трансляция намерений может выполняться, если обнаружен интернет.

Код для трансляции:

  Intent i = new Intent(DO_REFRESH); sendBroadcast(i); 

Широкий для получения намерений:

 doRefreshBroadcastReceiver drbr; ... onResume() { // register the refreshing complete broadcast receiver IntentFilter intentFilter = new IntentFilter(DO_REFRESH); drbr = new doRefreshBroadcastReceiver(); registerReceiver(drbr,intentFilter); } public class doRefreshBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // call method to run fetch code... } }