我在Android上有一个应用程序,它是TCP/IP连接的客户端...这个应用程序可以接收来自GPS提供者的GPSt数据,并将其发送到我的TCP/IP连接的服务器端。
但是当没有互联网连接时,我必须将GPS数据存储在数据库中...并且一旦我再次拥有互联网连接,我必须重新启动客户端并重新连接到我的服务器并发送数据。
问题:1.如何在Android中检测互联网连接?(我的应用程序正在模拟器上运行)
2.一旦我检测到互联网连接,是否可能要求我的线程客户端重新连接到服务器?
以下是我的代码示意图:
但是当没有互联网连接时,我必须将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 s-a 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()方法中启动线程吗?
我有些困惑,如果您能为我澄清一下这个问题,以及我应该在哪里启动您所说的意图,那就太感谢了。
getActiveNetworkInfo()
。 - wired00isNetworkAvailable()
)?在启动线程之前调用它...如果返回 true,则运行线程,如果为 null,则不运行。在这种情况下,你就不需要我提到的意图广播了。private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null; }
- wired00