2016-07-05 17 views
1

私は組み込みDB(Realm.io)にデータを保存していますが、継続したいインターネット接続があるかどうかを確認し、接続がOKならばサーバと同期するデータがあるかどうかを確認してからデータを同期させます組み込みDBから同期データを削除し、別のデータが埋め込みDBに追加されるまで状態を「同期」に設定します。データベースを同期するためのインターネット接続を継続的にチェックする方法は? (Android)

インターネット接続の非同期性をチェックしているようです。私はBroadcastReciever実装する必要があります。

Internet listener Android example

をしかし、私は活動を変更したときに多分私は、インターネット接続を取得するので、私はあらゆる活動でこれを行う必要があり、私は、すべての活動でこのブロードキャストレシーバを追加すると思ったが、汚れて見えますどのように私はこれをクリーンな方法で行うことができますか?ブロードキャストレシーバを持つスレッドを作成することは可能ですか?また、inet接続が正常にデータを保持していて、アプリケーションが終了するまでそのデータを有効にしておきますか?あなたの地元からのデータを送信するために

public class MyIntentService extends IntentService { 
private PreferenceController preferenceController; 

public MyIntentService() { 
    super("MyIntentService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    preferenceController = new PreferenceController(this); 

    int i = 0; 
    while (i >= 0) { 
     Log.d("ISERVICE", "checking number: " + i); 
     checkUpdate(); 
     waitInSeconds(300); 
     i++; 
    } 
} 

private void waitInSeconds(int seconds) { 
    try { 
     Thread.sleep(seconds * 1000); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

private void checkUpdate() { 
    if (preferenceController.getBooleanPreference("SYNC_DB", false)) { // if DB need to be synchronized 
     if (isOnline()) { // if connected to internet 
      syncDatabases(); 
     } 
    } 
} 

private void syncDatabases() { 
    // Do stuff to synchronize realm.io with server 
} 

/* 
    Recieve Broadcast if internet is available again and call checkUpdate() 
*/ 

public boolean isOnline() { 

    Runtime runtime = Runtime.getRuntime(); 
    try { 

     Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
     int exitValue = ipProcess.waitFor(); 
     return (exitValue == 0); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    return false; 
} 

}

答えて

0

使用IntentService:DBを同期する必要があり、インターネットが利用できる同期DBであればあれば

は今、私がチェックするために永久的なIntentServiceをやろうとしていますデータベースからサーバーへ。

IntentServiceの助けを借りて、インターネットが存在することも確認します。アプリケーションの再起動時にメインアクティビティでIntentServiceを実行するかどうかを確認し、そうでなければIntentServiceを再度開始します。

アプリケーションがバックグラウンドではなくフォアグラウンドでない場合にも、これを実行するには、AlarmReceiverを使用してIntentServiceを登録します。

+0

私はそれを試してみましょう。私は結果をコメントします – MikeOx

+0

私はいつも助けてくれると確信しています –

+0

IntentServiceについてのコメントは、Androidが30分のような時間の後にそれを殺すため、サービスを使用するほうが優れているだけでなく、短いタスク(何度も何度も関係ない)と長いタスクのためのIntentService(今は一度だけ)のために設計されています。 7時間以上稼働しているので、データをDBと同期させるために何か安全なものが必要な場合 インテントサービスが稼動しているかどうかをチェックし、再起動しない場合は、 – MikeOx

関連する問題