【发布时间】:2015-08-20 07:31:10
【问题描述】:
我在 SQLite 中有一组记录(数据)我的目标是在连接到互联网时将记录(数据)上传到服务器,它应该在不通知用户的情况下上传记录(数据),并且不应该上传相同的数据两次。现在我可以使用 AsyncTask 在新数据到达时立即上传。
我想知道,逻辑是如何工作的。任何建议或工作示例将不胜感激。
【问题讨论】:
标签: android sqlite android-asynctask
我在 SQLite 中有一组记录(数据)我的目标是在连接到互联网时将记录(数据)上传到服务器,它应该在不通知用户的情况下上传记录(数据),并且不应该上传相同的数据两次。现在我可以使用 AsyncTask 在新数据到达时立即上传。
我想知道,逻辑是如何工作的。任何建议或工作示例将不胜感激。
【问题讨论】:
标签: android sqlite android-asynctask
使用BroadCastReceiver 在连接到互联网时获得通知。
在活动中注册您的 BroadCastReciever 以获取 wifi 状态更改通知,或者您可以在清单中注册接收器。
private void registerReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);
}
为了检查互联网连接,您可以使用以下类,
public class CheckConnectivity {
private Context _context;
public CheckConnectivity(Context context) {
this._context = context;
}
public boolean isConnectingToInternet() {
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;
}
public boolean hasActiveInternetConnection() {
if (isConnectingToInternet()) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL(Constants.INTERNET_CONNECTION_URL).openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(5000);
urlc.connect();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
return false;
}
} else {
return false;
}
}
}
【讨论】: