在咨询了很多 Stackoverflow 之后,我发现了这个解决方案: https ://stackoverflow.com/a/11401196/2440358
现在我已经在使用一个 IntentService 来处理与服务器的通信,并且我已经实现了一个正在寻找当前连接状态的 BroadcastReceiver。
意向服务:
public class CommunicationService extends IntentService {
public CommunicationService() {
super(CommunicationService.class.getName());
}
@Override
protected void onHandleIntent(Intent intent) {
String kind = intent.getExtras().getString("kind");
if ("LocationUpdate".equals(kind)) {
// send current Location to the server
}
}
广播接收器:
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
checkConnectionState(context);
}
public static boolean checkConnectionState(final Context context) {
final ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
Intent intent = new Intent(context, CommunicationService.class);
intent.putExtra("kind", "");
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
// start service
context.startService(intent);
return true;
} else {
// stop service
context.stopService(intent);
return false;
}
}
}
这一切都像一个魅力,但我不知道如何将这两者结合在一起,就像上面链接中提到的那样。我真的很想在没有 IntentService 的情况下使用上面提到的自动排队。
有没有一种简单的方法可以利用 IntentServices 排队并使其排队所有内容,直到连接恢复?
在此先感谢您的帮助 :)
编辑:现在我用一种肮脏的技巧解决了它。应用程序本身现在有一个队列,意图被添加到其中以防万一它们出错(执行期间互联网连接丢失)或根本没有互联网连接。当互联网连接可用时,来自该队列的意图将在广播接收器 onReceive() 中再次启动。我希望它可以帮助某人;)