2012-05-22 6 views
0

Можно создать дубликат:
Android detect if device has internet connectionКак обнаружить подключение к Интернету

Я одну программу, Я разрешаю только андроида пользователь, имеющий доступ в Интернет, подключенный доступ, другой пользователь, который не имеет подключение к Интернету предупреждает их о подключении к Интернету, если проблема с подключением не завершится.

Мой главный код деятельности внизу. Я хочу, чтобы мобильный пользователь подключился к Интернету, покажет Main Layout, но если он не подключен, пользователь должен сначала подключиться к Интернету.

Как я могу это сделать? Пожалуйста, помогите мне.

Мой Основная деятельность:

public class MainSong extends Activity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    //My Profile 
    Button myProfile = (Button) findViewById(R.id.myprofile); 


    myProfile.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i.setClassName("aaa.bbb.ccc", "aaa.bbb.ccc.myprofile"); 
      startActivity(i); } 
    }); 

    //My Songs 
    Button mySong = (Button) findViewById(R.id.mysongs); 
    mySong.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i.setClassName("aaa.bbb.ccc", "aaa.bbb.ccc.mysong"); 
      startActivity(i); } 
    }); 

    //bar album 
    Button album = (Button) findViewById(R.id.myalbum); 
    album.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i.setClassName("aaa.bbb.ccc", "aaa.bbb.ccc.myalbum"); 
      startActivity(i); } 
    }); 

    //bar video 
    Button video = (Button) findViewById(R.id.myvideo); 
    video.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i.setClassName("aaa.bbb.ccc", "aaa.bbb.ccc.myvideo"); 
      startActivity(i); } 
    }); 
} 
} 

Я ценю за вашу помощь.

ответ

1

Вот код, который я использую в моем Android приложение:

  CharSequence network_fail = "This application requires that you are connected to the Internet."; 
      int duration = Toast.LENGTH_SHORT; 
      boolean isAvailable = false; 

      // Check availability of network connection 
      try 
      { 
       ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
       if(cm == null) 
        isAvailable = false; 
       else 
        isAvailable = cm.getActiveNetworkInfo().isAvailable(); 
      } 
      catch(Exception e){} 

Поместите свой Интернет-кода зависит это, если:

  // Check if user is connected to the Internet, and show an error if they are not. 
      if(isAvailable && (isAirplaneModeOn(context) == false)) 
      { 
       // Internet-reliant code 
      } 
      else 
      { 
       Toast fail = Toast.makeText(context, network_fail, duration); 
       fail.show(); 
      } 

Кроме того, необходимо обязательное <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> в файле AndroidManifest.xml с моим кодом также.

+0

Дорогой Алекс W, можете ли вы объяснить мне это ясно? потому что я не могу добавить свой код в свою основную деятельность? – SopheakVirak

+0

В моем приложении у меня есть все вышеприведенный код, в том порядке, в котором он появляется, внутри кнопки onClickListener для кнопки. Пример: кнопка imgButton = (кнопка) findViewById (R.id.buttonImg); imgButton.setOnClickListener (новый OnClickListener() {public void onClick (просмотр arg0) {// PUT CODE HERE}}); ... поместите это в свой основной вид деятельности и измените его, чтобы иметь отношение к кнопке, которая у вас есть в вашем макете –

1

Вы можете проверить, если пользователь подключен к Интернету или нет, используя ConnectivityManager как:

public boolean checkNetworkStatus() { 

    final ConnectivityManager connMgr = (ConnectivityManager) this 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    final android.net.NetworkInfo wifi = connMgr 
      .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    final android.net.NetworkInfo mobile = connMgr 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (wifi.isAvailable()) { 
    if (wifiInfo.getState() == NetworkInfo.State.CONNECTED) 
     { 
     Toast.makeText(this, "Wifi connection.", Toast.LENGTH_LONG).show(); 
     return true; 
     } 
     else 
     { 
     Toast.makeText(this, "No Connect using wifi connection.", Toast.LENGTH_LONG).show(); 
     return false; 
     } 
    } else if (mobile.isAvailable()) { 
     if (mobile.getState() == NetworkInfo.State.CONNECTED) 
     { 
     Toast.makeText(this, "Connected using GPRS connection.", Toast.LENGTH_LONG).show(); 
     return true; 
     } 
     else 
     { 
     Toast.makeText(this, "No Connect using GPRS connection.", Toast.LENGTH_LONG).show(); 
     return false; 
     } 

    } else { 
     Toast.makeText(this, "No network connection.", Toast.LENGTH_LONG).show(); 
     return false; 
    }  

} 

AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Уважаемый Имран Хан, Ваш код не работает. – SopheakVirak

1
//To check whether network connection is available on device or not 
public static boolean checkInternetConnection(Context _activity) { 
     ConnectivityManager conMgr = (ConnectivityManager) _activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (conMgr.getActiveNetworkInfo() != null 
       && conMgr.getActiveNetworkInfo().isAvailable() 
       && conMgr.getActiveNetworkInfo().isConnected()) 
      return true; 
     else 
      return false; 
    }//checkInternetConnection() 

AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Agarwal, я добавил ваш код, он не появляется никакой ошибки, но после его компиляции без подключения к Интернету я все равно могу перейти к моему приложению как обычно. – SopheakVirak

+0

вы должны вызывать эту функцию каждый раз, когда вам нужно подключение к сети, и проверить, что он вернет true или нет. если он возвращает true, тогда доступен net connetion, и вы можете продолжить else, если он возвращает false, тогда вы должны показать диалог с вашим сообщением пользователю –

0

Вы должны сделать BroadcastReceiver, что будет срабатывать, когда состояние подключения изменилось:

 public class BroadCastSampleActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     this.registerReceiver(this.mConnReceiver, 
       new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
    } 
    private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
     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); 

      if(currentNetworkInfo.isConnected()){ 
       Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show(); 
      }else{ 
       Toast.makeText(getApplicationContext(), "Not Connected", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }; 
} 

, а затем в вашем AndroidManifest вы можете проверить, если у вас есть подключение:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Для справки здесь here source