1

在咨询了很多 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() 中再次启动。我希望它可以帮助某人;)

4

0 回答 0