2013-03-03 5 views
3

내 문제는 : 인터넷 연결이 없을 때 내 응용 프로그램이 단추 또는 전체 활동을 차단하고 인터넷 연결이 다시있을 때 해당 응용 프로그램의 차단을 해제하고 싶습니다. 나는 주요 활동, 인터넷을 확인하기 위해 브로드 캐스트 리시버를 사용하고 있는데 잘 작동 :(BroadcastReceiver 사용)

public class MainActivity extends BroadCast { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     this.registerReceiver(this.mConnReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
} 

// code 
} 

가 false로 설정 방법 setCancelable와 나는해서 ProgressDialog를 사용하고 MainActivity를 차단하려면. 방송 활동 :

public class BroadCast extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
    } 

    public BroadcastReceiver mConnReceiver = new BroadcastReceiver() 
    { 
     public void onReceive(Context context, Intent intent) 
     { 
      @SuppressWarnings("deprecation") 
      NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 

      if(currentNetworkInfo.isConnected()) { 
       BlockActivity(true); 
      } 
      else { 
       BlockActivity(false); 
      } 
     } 
    }; 

    public void BlockActivity(Boolean connected) 
    { 
     final ProgressDialog pausingDialog = ProgressDialog.show(this, "", "Application waiting for internet connection..."); 

     if (!connected) 
     { 
      Toast.makeText(getApplicationContext(), "Disconnected", Toast.LENGTH_LONG).show(); 
      pausingDialog.show(); 
      pausingDialog.setCancelable(false); 
     } 
     else 
     { 
      Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show(); 
      pausingDialog.setCancelable(true); 
      pausingDialog.dismiss();   
     } 
    } 
} 

토스트 정보는 잘 작동하지만 문제는해서 ProgressDialog와 함께입니다. 인터넷 연결이 끊어졌을 때 나타나지만 인터넷 연결이 끝나면 사라지지 않습니다. 그것을 고치는 방법? 감사.

답변

0

대화 상자를 계속 재구성하지 않도록 대화 상자에 대한 글로벌 참조를 유지하십시오. 가능한 경우 기본 유형 (Boolean 대신 boolean)을 사용해야하며 Java 명명 규칙 (camelCase)을 준수해야합니다.

ProgressDialog pausingDialog; 
public void blockActivity(boolean connected) 
    { 
     if (pausingDialog == null){ 
      pausingDialog = new ProgressDialog (this); 
      pausingDialog.setMessage ("Application waiting for internet connection..."); 
     } 

     if (!connected) 
     { 
      Toast.makeText(getApplicationContext(), "Disconnected", Toast.LENGTH_LONG).show(); 
      pausingDialog.show(); 
      pausingDialog.setCancelable(false); 
     } 
     else 
     { 
      Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show(); 
      pausingDialog.setCancelable(true); 
      pausingDialog.dismiss();   
     } 
    } 
+0

작동합니다! 고마워요 :) – namakemono

+0

@ user2129253 환영합니다 :-) 문제가 해결되었으므로 [녹색으로 바뀌기 때문에 빈 체크 표시를 클릭하십시오] (http://meta.stackexchange.com/a/5235/) 202881). –