2013-06-06 6 views
2

인터넷 연결이 있는지 확인하는 코드를 구현 중입니다. 그렇지 않은 경우 사용자가 인터넷 연결을 선택할 수 있도록 WiFi 설정을 시작합니다.startActivity (의도) 이후 활동 재개

문제는 사용자가 연결을 선택하고 뒤로 버튼을 클릭하면 내 활동이 실행을 계속할 연결이 있는지 다시 확인하지만 다시 NETWORK_INACTIVE 대화 상자로 이동하기를 원합니다. 내가 옵션 startActivityForResult(Intent, int)을 본 적이 있지만, 내가 설정의 사용과 어떤 해결책을 발견 did't

protected boolean hasNetworkConnection() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    try{ 
     if (!wifi.isConnected()){ 
      if(mobile==null || (mobile!=null && !mobile.isConnected())){ 
       onCreateDialog(NETWORK_INACTIVE).show(); 
       return false; 
      } 
     } 
    }catch(Exception e){ 
     Log.e("AEP41-Has Network", ""+e.getStackTrace()); 
    } 
    return true; 
} 
@Override 
    protected Dialog onCreateDialog(int id) { 
     AlertDialog.Builder builter = new AlertDialog.Builder(
       AEP41Activity.this); 

    switch (id) { 

    case NETWORK_INACTIVE: 
     builter.setCancelable(false); 
     builter.setTitle("Erreur de Reseau"); 
     builter.setMessage("Aucune connexion internet trouve"); 
     builter.setNegativeButton("Sortir", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         AEP41Activity.this.finish(); 
        } 
       }); 
     builter.setNeutralButton("Choisir Connexion", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         startActivity(new Intent(
           Settings.ACTION_WIFI_SETTINGS)); 
       }); 
     break; 

    default: 
     break; 
    } 
    return builter.create(); 
} 

: 여기

내가 새로운 활동을 시작하는 코드입니다.

이렇게하는 방법이 있습니까? 사전에

감사)

+0

'Activity'의 어떤 메소드에서'hasNetworkConnection()'을 호출하고 있습니까? – Squonk

+0

@Squonk 그 onCreate()의 시작 부분에 –

답변

2

이 호출이 올바르지 않습니다 :

onCreateDialog(NETWORK_INACTIVE).show(); 

당신은 onCreateDialog() 자신을 호출하지 않아야합니다. Android 프레임 워크가이 작업을 수행합니다. 대신 onCreateDialog(NETWORK_INACTIVE).show();를 호출하면이 작업을 수행해야합니다

showDialog(NETWORK_INACTIVE); 
+0

이것은 일시적인 해결책입니다 ... 그리고 API 13에서는 showDialog (int)가 더 이상 사용되지 않습니다 ... DialogFragment를 구현하거나 대화 상자의 하위 클래스를 만듭니다. –

+0

'showDialog()'는 잘 동작합니다. '사용되지 않음'은 작동하지 않는다고 의미하지 않습니다. 단지 향후 릴리스에서 사라질 수도 있음을 의미합니다. 내 코드를 사용해보고 도움이되는지 확인하십시오. –

+0

사실 showDialog를 사용하면 대화 상자가 사라지고 onCreateDialog를 사용하지 않을 경우 ... 대화 상자 버튼의 기본 동작을 만드는 onPrepareDialog가 있다고 가정합니다.이 경우에는 cliqued 할 때 대화 상자를 닫습니다. 도와 주셔서 감사합니다;) –

1

내가 onResume()에서 활성 연결을 확인하지 존재하는 경우 I는 다음과 같이 AlertDialog을 만들 수있는 방법이 ...

protected void createNetErrorDialog() { 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("You need a network connection to use this application. Please turn on mobile network or Wi-Fi in Settings.") 
    .setTitle("Unable to connect") 
    .setCancelable(false) 
    .setPositiveButton("Settings", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 
       startActivity(i); 
      } 
     } 
    ) 
    .setNegativeButton("Cancel", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       MainActivity.this.finish(); 
      } 
     } 
    ); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

사용자가 취소 버튼을 누르면 Activity을 종료하고 그렇지 않으면 설정을 시작합니다. 사용자가 설정에서 BACK을 누르면 onResume()이 다시 호출되고 네트워크가 다시 검사됩니다. 이것은 나를 위해 잘 작동합니다.

+0

도움 주셔서 감사합니다하지만 내 전화 onCreateDialog(). show() 때문에 대화가 사라 졌던 것 같습니다. 대신 showDialog()를 호출해야했습니다. –