2017-05-30 83 views
0

此處發生網絡更改時,當發生網絡更改時,快餐欄將重複重複三到四次。如何避免它? 在此先感謝快餐欄自動重複

主要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

你可以嘗試讓snackBar.dismiss();在顯示之前,但是如果每次觸發3次,它在你的邏輯中是不合適的 –

回答

0

Snackbar被重複,因爲 BroadcastReceiver()onReceive()方法不斷被解僱,廣播之後 意圖。

所以你必須unRegister()那個接收器在接收後在 onReceive()

步驟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); 
     } 
    } 

步驟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> 

步驟3

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

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

如何註銷它可以通過調用這個unregisterReceiver(yourBroadcastReceiver)來幫助我 – user8076850

+0

;在onReceive(); –

+0

'public void onReceive(Context context,Intent intent){Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION); networkStateIntent.putExtra(IS_NETWORK_AVAILABLE,isConnectedToInternet(context)); LocalBroadcastManager.getInstance(上下文).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

無法解析的方法sendBroadcast() – user8076850

+0

讓我檢查它 – user8076850

+0

沒有錯誤,但沒有廣播 – user8076850