0

サーバーに POST 要求を行う小さな Android アプリがあります。問題は、要求が失敗したときに、デバイス上のネットワークの可用性を確認した後、しばらくしてから投稿を再試行できるようにすることです。これはどのように行うことができますか?送信するデータを永続化するためにサービスとデータベースを実装する必要がありますか? アラームマネージャーについて読んだことがありますが、アクティビティでこれを実装する方法がわかりません。

4

2 に答える 2

5

常にサービスを実行する必要はありません。POST または Web 要求が失敗した場合は、キューに入れることができます。(何らかの方法でリクエストを保存します [Shared params, db])。次に、ブロードキャスト レシーバーを使用し、接続をサブスクライブして意図を変更します。受信機で、現在接続されているかどうかを確認します。あなたキューに何かがある場合は、サービスを生成してキューを処理できます。

あなたが興味を持つべき2つの正確な放送はこれらです

 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" />
于 2013-04-02T14:18:37.240 に答える
0

BroadcastReceiver を拡張するクラスを作成し、そのクラスを次のように登録します。

ネットワーク上の変更により、このブロードキャストがトリガーされます。

受信した変更の詳細については、インテント エクストラ ConnectivityManager.EXTRA_NETWORK_INFO、ConnectivityManager.EXTRA_OTHER_NETWORK_INFO、ConnectivityManager.EXTRA_NO_CONNECTIVITY、および ConnectivityManager.EXTRA_REASON を確認できます。

于 2013-04-02T14:17:38.720 に答える