При запуске приложения приемник широковещательной проверки моей сети вызывает задержку.Поэтому я нашел решение .
Вместо расширения класса BroadcastReceiver и создания NetworkStateChangeReceiver, я создал широковещательный приемник для своей деятельности и зарегистрировал его там.Теперь он работает, и метод onReceive () запускается немедленно.
Я пробовал этот способ, но он перестал работать.Может кто-нибудь, пожалуйста, решить проблему.
Вот код:
private BroadcastReceiver mNetworkReceiver;
static TextView tv_check_connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_check_connection=(TextView) findViewById(R.id.tv_check_connection);
BroadcastReceiver mNetworkReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try
{
if (isOnline(context)) {
dialog(true);
Log.e("Hi", "Online Connect Intenet ");
} else {
dialog(false);
Log.e("Sorry","Conectivity Failure !!! ");
Toast.makeText(MainActivity.context,"No internet",Toast.LENGTH_LONG).show();
}
} catch (NullPointerException e) {
e.printStackTrace();
}
}
};
registerNetworkBroadcastForNougat();
});
public static void dialog(boolean value){...}
private void registerNetworkBroadcastForNougat() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
}
protected void unregisterNetworkChanges() {
try {
unregisterReceiver(mNetworkReceiver);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
protected void onDestroy() {
super.onDestroy();
unregisterNetworkChanges();}
private boolean isOnline(Context context) {
//try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//should check null because in airplane mode it will be null
return (netInfo != null && netInfo.isConnected());
//} //catch (NullPointerException e) {
//e.printStackTrace();
//return false;
//}
}