gpt4 book ai didi

android - 在android中检测互联网连接

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:11 25 4
gpt4 key购买 nike

我在 android 中有一个应用程序,它是一种 TCP/IP 连接的客户端......这个应用程序使用从 GPS 提供商接收 GPSt 数据并将其发送到我的 TCP/IP 的服务器端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 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() 中启动我的线程????

如果你能为我澄清一点,我有点困惑......我应该从哪里开始你告诉我的 Intent?谢谢

最佳答案

thread回答你的问题

关于启动时发生的事情。然后,您可以提出广播 Intent 并通过 Activity 接收 Intent ,一旦互联网可用,该 Activity 将执行更新

希望对你有帮助

编辑:通过广播 Intent ,我的意思是这样的。我不确定这是否是其他人可能提供的最佳解决方案...

如果检测到互联网,可以运行以下 Intent 广播。

广播 Intent 的代码:

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

广泛接收 Intent :

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...
}
}

关于android - 在android中检测互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com