Ich entwickle einen Android-Rundfunkempfänger zur Überprüfung der Internetverbindung.
Das Problem ist, dass mein Rundfunkempfänger zweimal angerufen wird. Ich möchte, dass es nur aufgerufen wird, wenn das Netzwerk verfügbar ist. Wenn es nicht verfügbar ist, möchte ich nicht benachrichtigt werden.
Dies ist der Rundfunkempfänger
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isAvailable() || mobile.isAvailable()) {
// Do something
Log.d("Network Available ", "Flag No 1");
}
}
}
Dies ist die manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastreceiverforinternetconnection"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
</application>
</manifest>
java
android
broadcastreceiver
android-wifi
android-networking
Nikhil Agrawal
quelle
quelle
Antworten:
Antwort auf Ihre erste Frage : Ihr Rundfunkempfänger wird wegen zweimal angerufen
Sie haben zwei hinzugefügt
<intent-filter>
Änderung der Netzwerkverbindung:
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
Änderung des WLAN-Status:
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
Verwenden Sie einfach eine :
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
.Es wird nur auf eine Aktion statt auf zwei reagiert. Sehen Sie hier für weitere Informationen.
Antwort auf Ihre zweite Frage (Sie möchten, dass der Empfänger nur einmal anruft, wenn eine Internetverbindung verfügbar ist):
Ihr Code ist perfekt; Sie benachrichtigen nur, wenn das Internet verfügbar ist.
AKTUALISIEREN
Mit dieser Methode können Sie Ihre Konnektivität überprüfen, wenn Sie nur überprüfen möchten, ob das Mobiltelefon mit dem Internet verbunden ist oder nicht.
quelle
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
registriert, aber mein Empfänger wird immer noch zweimal angerufen. Es ist kein wirklich großes Problem, aber ich würde gerne wissen warum.ServiceManager.java
Berechtigungen:
quelle
ServiceManager extends ContextWrapper
? Warum müssen Sie ContextWrapper erweitern? WARUM!?Überprüfen des Internetstatus jedes Mal mit dem Broadcast Receiver:
Vollständiger Quellcode auf Google Drive verfügbar .
AndroidManifest.xml
BroadcastReciever
MainActivity.java
activity_main.xml
quelle
Verwenden Sie diese Methode, um den Netzwerkstatus zu überprüfen:
Denken Sie daran, den Dienst in onDestroy abzumelden.
Prost!!
quelle
Dieser oben genannte Rundfunkempfänger wird nur aufgerufen, wenn der Netzwerkstatus auf "Verbunden" und nicht auf "Nicht getrennt" geändert wird.
quelle
Ich weiß, dass dieser Thread alt und vollständig beantwortet ist, aber ich bin der Meinung, dass das Folgende einigen Menschen helfen könnte.
Der Code im Hauptteil der Frage enthält einen Fehler, den hier niemand angesprochen hat. @Nikhil prüft, ob das WLAN / Handy verfügbar ist und nicht, ob es verbunden ist.
Das Update ist hier:
quelle
Manifest:
Klasse für Empfänger:
und Klassen-Utils wie Beispiel:
quelle
Nur für jemanden, der eine Sendung dynamisch registrieren möchte:
quelle
Versuchen Sie es damit
Sobald die Internetverbindung ausgelöst wird, wird dieser (BroadcastReciever) geladen
quelle
CONNECTIVITY_ACTION docs :
quelle
Hier ist eine bequeme Möglichkeit, dies für Aktivitäten, Fragmente oder Kontexte zu tun. Die Registrierung wird auch automatisch aufgehoben, wenn Sie dies für Aktivität / Fragment (in onDestroy) tun, wenn Sie dies wünschen:
Verwendung in Fragment:
quelle
}}
quelle
Fügen Sie einen Broadcast-Empfänger hinzu, der Änderungen der Netzwerkkonnektivität abhören kann. Überprüfen Sie anschließend, ob das Gerät mit dem Internet verbunden ist oder nicht mit ConnectivityManager. Weitere Informationen finden Sie in diesem Beitrag oder Video . Unten ist der Code:
Ich habe diesen Empfänger geschrieben, um eine Benachrichtigung auf dem Bildschirm anzuzeigen. Deshalb wird eine lokale Sendung mit dem Netzwerkstatus angezeigt. Hier ist der Code zum Anzeigen der Benachrichtigung.
Die Aktivität hört die vom Netzwerkempfänger gesendete Absicht ab und zeigt die Benachrichtigung auf dem Bildschirm an.
quelle
Warnung:
Declaring a broadcastreceiver for android.net.conn.CONNECTIVITY_CHANGE is deprecated for apps targeting N and higher. In general, apps should not rely on this broadcast and instead use JobScheduler or GCMNetworkManager.
Wie
CONNECTIVITY_CHANGE
veraltet ist, sollten wir eine andere Methode verwenden, um das Gleiche zu tunIm Folgenden
NetworkConnectionLiveData
wird die gesamte Betriebssystemversion bis jetzt behandelt, und auch wenn das Ziel-SDK kleiner als dasBuild.VERSION_CODES.LOLLIPOP
ist, können nur wir es verwendenbroadcastReceiver
Das Beste daran ist, dass diese Klasse verwendet wird,
LiveData
sodass keine Empfängernutzung registriert werden mussLiveData
und alle Dinge erledigt werdenVerwendung der LiveData in einer beliebigen Klasse:
quelle
Vollständige Antwort hier
Menifest-Datei
BroadecardReceiver-Klasse
Empfänger registrieren in
MainActivity
Genießen!
quelle
Broadcast-Empfängercode zur Überprüfung der Änderung der Internetverbindung:
Fügen Sie dies in die Manifestdatei ein:
quelle
Dies prüft nur, ob die Netzwerkschnittstelle verfügbar ist, garantiert nicht, dass ein bestimmter Netzwerkdienst verfügbar ist, z. B. kann es zu einem niedrigen Signal oder zu Serverausfällen kommen
Wenn Sie eine echte Verbindung herstellen möchten, um sicherzustellen, dass Ihre Verbindung Daten von einem Server oder einer beliebigen URL erfassen kann:
Diese Funktion muss in einen Hintergrund-Thread eingeschlossen werden:
Erforderliche Berechtigungen hinzufügen:
Fügen Sie diese Zeile unter Anwendung in Manifestdatei hinzu:
Empfänger zur Manifestdatei hinzufügen:
Registrieren / Aufheben der Registrierung des BR in Ihrer Aktivität:
Dies ist die gesamte Broadcast-Klasse:
quelle
Es ist einfacher, https://github.com/JobGetabu/DroidNet zu verwenden
quelle
Berechtigungen hinzufügen:
Erstellen Sie einen Empfänger, um die Verbindung zu überprüfen
ServiceManager.java
quelle
1) Im Manifest: - Empfänger wie unten angegeben anrufen
2) Erstellen Sie eine Broadcast-Empfängerklasse: - Fügen Sie in dieser Klasse den Code der Netzwerkprüfung hinzu
3) In Ihrem Aktivitätsanruf an Broadcast Receiver: -
quelle
Zunächst erstellen wir eine Klasse, die die Konnektivität des Netzwerkstatus überprüft. Erstellen wir also eine Klasse:
Erstellen Sie jetzt eine neue Broadcast-Empfängerklasse:
und Registrieren Sie jetzt Ihren Rundfunkempfänger im Manifest:
quelle