2013-04-02 1 views
0

서버에 약간의 POST 요청을하는 안드로이드 응용 프로그램이 있습니다. 문제는 내 앱이 가능할 때입니다. 요청이 실패하면 얼마 후에 게시를 다시 시도 할 수 있기를 원합니다. 장치에서 네트워크의 가용성을 확인합니다. 이것을 어떻게 할 수 있습니까? 보내는 데이터를 유지하기 위해 서비스와 데이터베이스를 구현하는 것이 필요합니까? 내가 alarmmanager에 대해 뭔가 읽었지만 내 활동으로 이것을 구현하는 방법을 모르겠습니다.기기가 다시 온라인 상태 일 때 게시 요청 다시 시도

답변

5

항상 실행중인 서비스가 필요하지 않습니다. POST 나 웹 요청이 실패하면 대기열에 넣을 수 있습니다. (어떻게 든 [공유 매개 변수, 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" /> 
+0

감사합니다, 한 번 더 질문해야합니까? – Henry1988

+0

물론 가능합니다. 귀하의 활동이 실행 중인지 여부와 상관없이 방송 수신자에게 통보됩니다. –

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 항목을 확인하십시오.

관련 문제