2017-05-30 3 views
0

Hier, wenn eine Netzwerkänderung auftritt, wiederholt die Snackbar drei oder vier Mal wiederholt, wenn eine Netzwerkänderung auftritt. wie man es vermeidet? Vielen Dank im Voraussnackbar wird automatisch wiederholt

Haupt activity.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.content_main); 


    registerReceiver(mHandleMessageReceiver, new IntentFilter("IS_NETWORK_AVAILABLE")); 


      //toolbar = (Toolbar) findViewById(R.id.toolbar); 
    myAnim= AnimationUtils.loadAnimation(this, R.anim.bounce); 
    //setSupportActionBar(toolbar); 
    //initNavigationDrawer(); 
    viewPager = (ViewPager) findViewById(R.id.splash); 
    ImageAdapter adapter = new ImageAdapter(this); 
    viewPager.setAdapter(adapter); 

} 

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     try{ 
      boolean isNetworkAvailable = intent.getBooleanExtra("IS_NETWORK_AVAILABLE", false); 
      String networkStatus = isNetworkAvailable ? "connected" : "disconnected"; 

      Snackbar snack = Snackbar 
        .make(findViewById(R.id.activity_main), "Network Status : " + networkStatus, Snackbar.LENGTH_SHORT); 
      View sbView = snack.getView(); 
      TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
      textView.setTextColor(Color.YELLOW); 
      if (networkStatus=="connected") { 
       snack.show(); 
      } 
      else if(networkStatus=="disconnected"){ 
       snack.make(findViewById(R.id.activity_container), "Network Status : " + networkStatus, Snackbar.LENGTH_SHORT); 
       snack.show(); 
      } 
      unregisterReceiver(mHandleMessageReceiver); 
     }catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
    } 
}; 

NetworkStateChangeReceiver.java

public class NetworkStateChangeReceiver extends BroadcastReceiver { 
    public static final String NETWORK_AVAILABLE_ACTION = "com.example.arun4fms.efix.NetworkStateChangeReceiver"; 
    public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION); 
     networkStateIntent.putExtra(IS_NETWORK_AVAILABLE, isConnectedToInternet(context)); 
     context.sendBroadcast(networkStateIntent); 
    } 

    private boolean isConnectedToInternet(Context context) { 
     try { 
      if (context != null) { 
       ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); 
       NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
       return networkInfo != null && networkInfo.isConnected(); 
      } 
      return false; 
     } catch (Exception e) { 
      Log.e(NetworkStateChangeReceiver.class.getName(), e.getMessage()); 
      return false; 
     } 
    } 
} 
+0

Sie können versuchen, snackBar.dismiss zu machen(); vor dem Zeigen, aber es ist smth in Ihrer Logik, wenn es für 3 Mal jedes Mal auslöst –

Antwort

0

Snackbar wiederholt, weil onReceive() Methode der BroadcastReceiver() kontinuierlich gefeuert wurde, nachdem Rundfunk, dass Intent.

so müssen Sie unRegister() dieser Empfänger nach dem Empfang in onReceive().

Schritt 1

public class MyReceiver extends BroadcastReceiver { 
     public MyReceiver() { 
     } 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // This method is called when this BroadcastReceiver receives an Intent broadcast. 
      Toast.makeText(context, "Action: " + intent.getAction(), Toast.LENGTH_SHORT).show(); 
unregisterReceiver(mReceiver); 
     } 
    } 

Schritt 2

<receiver 
    android:name="com.pycitup.pyc.MyReceiver" 
    android:enabled="true" 
    android:exported="true" > 
    <intent-filter> 
     <action android:name="com.pycitup.BroadcastReceiver" /> 
    </intent-filter> 
</receiver> 

Schritt 3

IntentFilter filter = new IntentFilter("com.pycitup.BroadcastReceiver"); 

MyReceiver myReceiver = new MyReceiver(); 
registerReceiver(myReceiver, filter); 
+0

Wie man es abmeldet, können Sie mir helfen – user8076850

+0

durch das Aufrufen dieses unregisterReceiver (yourBroadcastReceiver); in onReceive(); –

+0

'public void onReceive (Kontextkontext, Absichtsabsicht) {Intent networkStateIntent = neuer Intent (NETWORK_AVAILABLE_ACTION); networkStateIntent.putExtra (IS_NETWORK_AVAILABLE, isConnectedToInternet (Kontext)); LocalBroadcastManager.getInstance (Kontext) .sendBroadcast (networkStateIntent); unregisterReceiver (yourBroadcastReceiver); } ' – user8076850

0

MainActivity.Java

public class MainActivity extends AppCompatActivity{ 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     registerReceiver(mHandleMessageReceiver, new IntentFilter("com.ajit.singh.NetworkAvailable")); 

    } 

    //make Broadcast class 
    private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      try{ 
       boolean isNetworkAvailable = intent.getBooleanExtra(IS_NETWORK_AVAILABLE, false); 
       String networkStatus = isNetworkAvailable ? "connected" : "disconnected"; 

       Snackbar snack = Snackbar 
         .make(findViewById(R.id.activity_main), "Network Status : " + networkStatus, Snackbar.LENGTH_SHORT); 
       View sbView = snack.getView(); 
       TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
       textView.setTextColor(Color.YELLOW); 
       if (networkStatus=="connected") { 
        snack.show(); 
       } 
       else if(networkStatus=="disconnected"){ 
        snack.make(findViewById(R.id.activity_container), "Network Status : " + networkStatus, Snackbar.LENGTH_SHORT); 
        snack.show(); 
       } 
       unregisterReceiver(mHandleMessageReceiver); 
      }catch (Exception e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } 
     } 
    }; 
} 

NetworkStateChangeReceiver.java

public class NetworkStateChangeReceiver extends BroadcastReceiver { 
     public static final String NETWORK_AVAILABLE_ACTION = "com.ajit.singh.NetworkAvailable"; 
     public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable"; 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION); 
      networkStateIntent.putExtra(IS_NETWORK_AVAILABLE, isConnectedToInternet(context)); 
      context.sendBroadcast(networkStateIntent); 
     } 

     private boolean isConnectedToInternet(Context context) { 
      try { 
       if (context != null) { 
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); 
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
        return networkInfo != null && networkInfo.isConnected(); 
       } 
       return false; 
      } catch (Exception e) { 
       Log.e(NetworkStateChangeReceiver.class.getName(), e.getMessage()); 
       return false; 
      } 
     } 
    } 
+0

kann Methode nicht auflösen sendBroadcast() – user8076850

+0

lassen Sie mich überprüfen – user8076850

+0

kein Fehler, aber keine Sendung – user8076850