2017-05-30 80 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