我有一个小的Android应用程序,向服务器发出一些POST请求,问题是我希望我的应用程序能够在请求失败时,在检查网络的可用性后重试Post一段时间设备。怎么做到这一点?是否有必要实现一个服务和一个数据库来保存我发送的数据?我已经阅读了一些关于alarmmanager的内容,但我不知道如何通过我的活动实现这一点。
答案 0 :(得分:5)
您不一定需要一直运行的服务。当POST或任何Web请求失败时,您可以对其进行排队。 (以某种方式存储请求[Shared params,db])。然后使用广播接收器和订阅连接更改意图。在接收器中,检查您是否已连接。如果你和队列中有东西,那么你可以产生一个服务来处理队列。
你应该感兴趣的两个确切的广播是这些
android.net.wifi.WIFI_STATE_CHANGED
android.net.wifi.supplicant.CONNECTION_CHANGE
您可以在清单中注册这些
<receiver android:name=".BroadcastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<!-- .... -->
</intent-filter>
</receiver>
在该广播接收器中,您可以使用此代码查看您是否有网络连接。
public boolean isOnline() {
cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm == null)
return false;
final NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED) {
return true;
} else {
return false;
}
}
对于此代码,您还需要这些权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 1 :(得分:0)
创建一个扩展BroadcastReceiver的类,然后像这样注册该类: registerReceiver(new BroadcastReceiverExtension,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
网络上的任何更改都会触发此广播。
您可以查看意图附加信息ConnectivityManager.EXTRA_NETWORK_INFO,ConnectivityManager.EXTRA_OTHER_NETWORK_INFO,ConnectivityManager.EXTRA_NO_CONNECTIVITY和ConnectivityManager.EXTRA_REASON,以获取有关收到的更改的更多信息。