我正在努力检查互联网连接的能力,就像 YouTube 目前在 Android 应用上所做的那样。
问题是如果互联网可用,它每次都显示为在线。我想让它就像它已经在线一样,不显示任何消息,但是当不在线时,每次都显示它。
这是我的 MainActivity 代码:
public class LoginActivity extends AppCompatActivity implements NetworkReceiver.ConnectionChangeCallback{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
IntentFilter intentFilter02 = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
networkReceiver = new NetworkReceiver();
registerReceiver(networkReceiver, intentFilter02);
networkReceiver.setConnectionChangeCallback(this);
}
@Override
public void onConnectionChange(boolean isConnected) {
if (isConnected){
// will be called when internet is gone.
tv_check_connection.setText("Back Online");
connection.setBackgroundColor(Color.parseColor("#00BE84"));
connection.startAnimation(slideDownToUp);
tv_check_connection.setTextColor(Color.WHITE);
Handler handler = new Handler();
Runnable delayrunnable = new Runnable() {
@Override
public void run() {
tv_check_connection.setVisibility(View.GONE);
}
};
handler.postDelayed(delayrunnable, 4000);
}else{
// will be called when internet is back
new MyDialog().show(getSupportFragmentManager(), "my_dialog");
tv_check_connection.setText("No connection");
tv_check_connection.setVisibility(View.VISIBLE);
connection.startAnimation(slideDownToUp);
connection.setBackgroundColor(Color.parseColor("#2D2D2D"));
tv_check_connection.setTextColor(Color.WHITE);
}
}
}
这是我的 NetworkReceiver 类:
public class NetworkReceiver extends BroadcastReceiver {
public static final String NETWORK_AVAILABLE_ACTION = "com.example.ritecare.NetworkAvailable";
public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable";
ConnectionChangeCallback connectionChangeCallback;
@Override
public void onReceive(Context context, Intent intent) {
Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION);
networkStateIntent.putExtra(IS_NETWORK_AVAILABLE, isOnline(context));
LocalBroadcastManager.getInstance(context).sendBroadcast(networkStateIntent);
if (connectionChangeCallback != null) {
connectionChangeCallback.onConnectionChange(isOnline(context));
}
}
private boolean isOnline(Context context) {
try {
if (context != null) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
//boolean isConnected = networkInfo != null && networkInfo.isConnectedOrConnecting();
return networkInfo != null && networkInfo.isConnected();
}
return false;
} catch (Exception e) {
Log.e(NetworkReceiver.class.getName(), e.getMessage());
return false;
}
}
public void setConnectionChangeCallback(ConnectionChangeCallback connectionChangeCallback) {
this.connectionChangeCallback = connectionChangeCallback;
}
public interface ConnectionChangeCallback {
void onConnectionChange(boolean isConnected);
}
}
如何做到这一点?