2017-02-13 1 views
0

Ich habe einen Schalter in meinem Android-Code verwendet. Wenn der Internet-Dienst verfügbar ist, dann lassen Sie nur toggle, sonst wird eine Toast-Nachricht angezeigt. Wie erreiche ich das? kann ich nicht mitLassen Sie den Schalter nur umschalten, wenn die Internetverbindung verfügbar ist

switch.setOnCheckedChangeListener().

Der Check funktioniert nur, wenn ich den Schalter zweimal drücke.

aSwitch.setEnabled(false); 

funktioniert erst, nachdem ich einmal klicken

+0

wenn der Toast entsprechend Ihrer Anforderung angezeigt wird? – tahsinRupam

+0

Wenn es eine Internetverbindung gibt, drücken Sie den Schalter und wenn kein Internet vorhanden ist, wird eine Toast-Nachricht angezeigt und der Kippschalter sollte nicht funktionieren. –

Antwort

4

zunächst eine boolean erstellen, die eine Fahne trägt:

boolean checkInternetFlag = false; 

dann eine Methode erstellen, die überprüfen, ob Internet wie dies zum Beispiel verfügbar:

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

Sie müssen diese Berechtigung auch in Ihrem Manifest hinzufügen:

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

Dann können Sie tun, was Sie so in einem Zustand wollen:

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

Auch können Sie Ihre Kippschalter wie folgt deaktivieren:

aSwitch.setEnabled(false); 

Und Schalter nicht anklickbar zu machen verwenden:

aSwitch.setClickable(false); 
+0

Ja Ich habe die Überprüfung durchgeführt, aber der Kippschalter ist noch aktiv –

0

Folgendes Methode fangen, wenn es eine Änderung networkstate aufgetreten:

1) In den Code zu onCreate():

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

2) hinzufügen OnDestroy() Methode:

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

    unregisterReceiver(receiver); 

} 

3) Fügen Sie Ihrer Aktivität den folgenden Code hinzu:

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) Fügen Sie diese Erlaubnis in Ihrer Manifest-Datei:

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

Hoffentlich Ihre Anforderung bezieht.

+0

Wenn ich ** aSwitch.setEnabled (false); ** benutze, wenn die Internetverbindung wiederhergestellt wird, funktioniert es nicht, da ich diesen Code in meinem Adapter der Navigation verwende Schublade. Danke für Ihre Hilfe. –

+0

Dann müssen Sie BroadcastReceiver verwenden, um die Änderung des Netzwerkstatus zu überwachen und dann Ihren Code auszulösen. – tahsinRupam

+0

Ich habe meine Antwort bearbeitet, wenn nicht gelöst, können Sie sich diese Antwort ansehen. – tahsinRupam

Verwandte Themen