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" />
AKTUALISIEREN
Wenn Ihre App auf API-Level 26 oder höher abzielt, können Sie das Manifest nicht verwenden, um einen Empfänger für implizite Broadcasts zu deklarieren (Broadcasts, die nicht speziell auf Ihre App abzielen), mit Ausnahme einiger impliziter Broadcasts, die von dieser Einschränkung ausgenommen sind. In den meisten Fällen können Sie stattdessen geplante Jobs verwenden.
Verwendung
connection = MyReceiver()
override fun onStart() {
super.onStart()
registerReceiver(connection, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
}
override fun onStop() {
super.onStop()
unregisterReceiver(connection)
}
UPDATE 2
CONNECTIVITY_ACTION
Diese Konstante wurde in API - Ebene veraltet 28. apps die vielseitiger verwenden sollten requestNetwork(NetworkRequest, PendingIntent)
, registerNetworkCallback(NetworkRequest, PendingIntent)
oder registerDefaultNetworkCallback(ConnectivityManager.NetworkCallback)
stattdessen die Funktionen für eine schnellere und detailliertere Updates über das Netzwerk ändert , was sie interessiert.
weil es added in API level 22
so oben Code funktioniert auf allen Versionen von Android gut