2017-02-13 4 views
0

Я использовал переключатель в своем коде Android. Если интернет-сервис доступен, тогда разрешите показ еще показывать тост-сообщение. Как мне это достичь? Я не могу это сделать, используяРазрешить переключение только в случае подключения к Интернету

switch.setOnCheckedChangeListener().

Проверка работает только в том случае, если я дважды нажимаю кнопку переключателя.

aSwitch.setEnabled(false); 

работает только после того, как я нажимаю один раз

+0

, когда тост будет показан в соответствии с вашими требованиями? – tahsinRupam

+0

Если есть подключение к интернету, тумблер и если нет интернета, то он будет показывать тост-сообщение, а тумблер не должен работать. –

ответ

4

Сначала нужно создать логическое, который несет флаг:

boolean checkInternetFlag = false; 

Затем создать метод, который проверить, если интернет доступен, как это, например:

public final boolean isInternetOn() { 
    ConnectivityManager connectivityManager 
     = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 

Вам также необходимо добавить это разрешение в манифест:

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

Тогда вы можете делать то, что вы хотите в состоянии, как это:

 checkInternetFlag = isInternetOn(); 
    if (!checkInternetFlag) { 
     Toast.makeText(getActivity(), "Internet not available", Toast.LENGTH_LONG).show(); 
    } 

Также вы можете отключить переключатель, как это:

aSwitch.setEnabled(false); 

И сделать выключатель не кликабельны использование:

aSwitch.setClickable(false); 
+0

Да, я сделал проверку, но тумблер по-прежнему активен. –

0

Следующие метод будет ловить, если есть изменение произошло в networkstate:

1) Добавьте этот код в OnCreate():

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
    NetworkChangeReceiver receiver = new NetworkChangeReceiver(); 
    registerReceiver(receiver, filter); 

2) Добавить OnDestroy() Метод:

@Override 
protected void onDestroy() { 
    Log.v(LOG_TAG, "onDestory"); 
    super.onDestroy(); 

    unregisterReceiver(receiver); 

} 

3) Добавить в список Код:

public class NetworkChangeReceiver extends BroadcastReceiver 
    { 

    @Override 
    public void onReceive(final Context context, final Intent intent) 
    { 

     Log.v(LOG_TAG, "Receieved notification about network status"); 
     isNetworkAvailable(context); 

    } 


    private boolean isNetworkAvailable(Context context) 
    { 
     ConnectivityManager connectivity = (ConnectivityManager) 
              context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
      { 
       for (int i = 0; i < info.length; i++) 
       { 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         if(!isConnected) 
         { 
          Log.v(LOG_TAG, "Now you are connected to Internet!"); 
          aSwitch.setEnabled(true); 
          isConnected = true; 
         } 
         return true; 
        } 
       } 
      } 
     } 
     Toast.makeText(YourActivity.this, "Internet is not available", Toast.LENGTH_SHORT).show(); 
     aSwitch.setEnabled(false); 
     isConnected = false; 
     return false; 
     } 
    } 

4) Добавить это разрешение в вашем файле манифеста:

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

Надеемся, что это имеет отношение к вашему требованию.

+0

Если я использую ** aSwitch.setEnabled (false); **, при восстановлении подключения к Интернету он не работает, поскольку я использую этот код внутри адаптера навигации выдвижной ящик. Спасибо за вашу помощь. –

+0

Затем вам необходимо использовать BroadcastReceiver для прослушивания изменения состояния сети, а затем запускать код. – tahsinRupam

+0

Я отредактировал свой ответ, если не решил, вы можете взглянуть на этот ответ. – tahsinRupam