2012-08-31 4 views
0

나는 모든 안드로이드 개발자가 언젠가는 직면하는 매우 일반적인 문제가 있습니다. 웹 서버에서 데이터를로드하는 앱을 만들고 있습니다. 따라서 인터넷 연결이 사용되고 있습니다. 하지만 서버를 호출하기 전에 인터넷 연결을 확인해야합니다. 나는 ConnectivityManager를 사용하여 그것을하고있다.인터넷 연결이 끊어지면이 활동을 계속 유지하는 방법 (다른 활동으로 가기보다는)?

내 문제는 실제로 인터넷 연결이 끊어지면 사용자에게 알려주는 것입니다. 내가 잃어버린 인터넷 연결에 대해 알리는 AlertDialog 상자를 사용자에게 보여주고 싶습니다. 이제 문제는 사용자가 버튼을 클릭하고 새 활동을 시작해야하는 경우 (서버에서 데이터를로드하는 경우), 호출 활동의 대화 상자를 표시 할 수 없다는 것입니다. 인터넷 이용이 불가능할 경우 다른 활동으로 이동하고 싶지 않습니다. 나는이 활동을 계속하고 싶다.

이 활동에는 많은 단추가 있으며 단추를 클릭하면 다른 활동으로 이동할 수 있습니다. 인터넷이 없다면 다른 활동을 열지 말고이 활동에 대해서만 대화 상자를 보여 주면됩니다. 이를 수행하는 한 가지 방법은 모든 버튼의 클릭 (onClick 메서드에서)을 확인한 다음 사용자에게 손실 된 인터넷 연결을 알리는 것입니다. 그러나 이것은 많은 활동과 모든 활동에 많은 버튼이 있기 때문에 나에게는 매우 바쁠 것입니다.

인터넷을 사용할 수없는 경우 다음 활동으로 이동하지 않고이 활동이 남아 있고 새로운 활동이 시작되고 발견 된 후 사용자에게 대화 상자를 표시하여 일반적으로 효율적인 방법을 찾을 수 있습니까? 이 문제를 해결하기위한 최선의 방법은 무엇입니까? 도와주세요. 나는 지난 2 일 동안 이것에 붙어있다. 고맙습니다. 여기

@Override 
    public void onClick(View view) { 
    switch(view.getId()){ 
     case R.id.backIcon: 
      navigateMenuScreen(view); 
      break; 
    } 
} 

는 내가 인터넷 연결을 확인하는 방법 (그리고 그것을 잘 작동) :

public void navigateMenuScreen(View view){ 
    try {   
     Intent loginIntent = new Intent(view.getContext(), MenuActivity.class);  
     startActivityForResult(loginIntent, 0);  
     overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);   
    } catch(Exception ex) { 
    } 
} 

내 질문에 내가 확인해야 할 것입니다 :

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 

    if (networkInfo!=null && networkInfo.isConnected()) { 
     return true; 
    } else { 
     return false; 
    } 

이 탐색 방법 모든 탐색 방법의 인터넷 연결 (위의 다른 방법이 있습니다) 또는 더 좋은 방법이 있습니까?

private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 
      String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); 
         boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false); 

      NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
      NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 

      // do application-specific task(s) based on the current network state, such 
      // as enabling queuing of HTTP requests when currentNetworkInfo is connected etc. 
     } 
    }; 

하는 것입니다

가능한 솔루션에
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

코드가 없으면 우리는 도움이 안됩니다. 코드를 보여주십시오. –

+3

또한 짧게 유지하십시오. 응답을받을 수있는 기회가 더 있습니다 – nandeesh

+1

여기에서 문제는 'Activity1'에 대한 확인을 수행하고 연결이 있는지 확인하고 'Activity2'를 실행하면 문제가 계속 될 것이라는 보장이 없습니다. 'Activity2'가 연결을 사용하기 시작할 때까지 거기있을 거라고 확신하지만 확실하지는 않습니다. – Basic

답변

2

등록은

registerReceiver(mConnReceiver, 
     new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

은 듣기 AsyncTaskLoader (docs)을 사용하십시오. 즉, 사용자가 Activity1의 버튼을 누르면 데이터를 검색하는 "백그라운드"작업이 시작됩니다. 데이터를 성공적으로 다운로드하면 Actiivty2을 표시 할 수 있습니다.

이 표시되는 시간 Activity2하여 데이터를 보장 할 것이지만, 이것이 Activity2 즉시 표시됩니다 (또는 전혀, 당신이 그것을 작성하는 방법에 따라)

을 잘 모르겠어요 보장 할 것입니다 확실히 무엇을 다시 읽었을 때 가치가 있습니다.

+0

고맙습니다. 연결을 끊었을 때 경고 대화 상자를 사용했습니다. 이제 액티비티 렌더링에 대해 생각할 필요가 없습니다. 인터넷 연결이 끊어지면 사용자가 아무 것도하지 못하게합니다. 난 그냥 "재시도"버튼이있는 지속적인 대화 상자를 보여줍니다. 따라서 사용자는 설정 또는 장치에서 인터넷 연결을 시도하거나 다시 시도해야합니다. –

1

(3.0 이상이 안드로이드 개발하고 가정) 매니페스트 파일 잊지 말아 :

+0

좋아 보인다. –

관련 문제