MyReceiver.java
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(isConnected(context)) Toast.makeText(context, "Connected.", Toast.LENGTH_LONG).show();
else Toast.makeText(context, "Lost connect.", Toast.LENGTH_LONG).show();
}
public boolean isConnected(Context context) {
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
return isConnected;
}
}
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
UPDATE
Если ваше приложение предназначено для API уровня 26 или выше, вы не можете использовать
манифест для объявления получателя для неявных трансляций (трансляций
которые не предназначены специально для вашего приложения), за исключением нескольких неявных
трансляции, которые освобождены от этого ограничения. В большинстве случаев вы
вместо этого можно использовать запланированные задания.
использование
connection = MyReceiver()
// onCreate - onDestroy, onResume - onPause depends on you
override fun onStart() {
super.onStart()
registerReceiver(connection, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
}
override fun onStop() {
super.onStop()
// remember unregister to avoid leak
unregisterReceiver(connection)
}
ОБНОВЛЕНИЕ 2
CONNECTIVITY_ACTION
Эта константа устарела на уровне API 28.
приложения должны использовать более универсальные функции requestNetwork(NetworkRequest, PendingIntent)
, registerNetworkCallback(NetworkRequest, PendingIntent)
или registerDefaultNetworkCallback(ConnectivityManager.NetworkCallback)
для более быстрого и более подробного обновления сетевых изменений, которые им нужны.
потому что это added in API level 22
, поэтому приведенный выше код будет хорошо работать на всех версиях Android