Wie zur Verarbeitung von Netzwerk-Wechsel zwischen wifi und mobile Daten?
Baue ich eine VoIP-app.Bei einem VoIP-Anruf, wenn der Benutzer wechselt zwischen WLAN zu mobilen Daten habe ich ein problem bei der Verarbeitung das Szenario.
In meinem Anruf-Bildschirm Aktivität ich habe mich registriert für receiver, der mir hilft, benachrichtigt Sie das Netz ändern Szenarien.
Dies ist der code, die ich benutze für die Erkennung von änderung in die Netze der onRecieve Methode. conn_name
ist private class level variable holding Vorherige Verbindung zu dem Namen.
ConnectivityManager connectivity_mgr = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
NetworkInfo net_info = connectivity_mgr.getActiveNetworkInfo();
if (net_info != null && net_info.isConnectedOrConnecting() && !conn_name.equalsIgnoreCase("")) {
new_con = net_info.getExtraInfo();
if (new_con != null && !new_con.equalsIgnoreCase(conn_name))
network_changed = true;
conn_name = (new_con == null) ? "" : new_con;
connectionStatus ="connected";
} else {
if (net_info != null && conn_name.equalsIgnoreCase("")){
conn_name = net_info.getExtraInfo();
connectionStatus ="connected";
network_changed = true;
}else if(!new_con.equals(conn_name)) {
conn_name = "";
connectionStatus ="disconnected";
network_changed = true;
}
}
Also unter Verwendung der obigen Methode, die ich in der Lage zu erkennen, Veränderungen im Netzwerk. Aber eine eigenartige Sache passiert, wenn ich verbunden bin mit dem WLAN. Wenn meine app startet zunächst ist es mit mobilen Daten.wenn Benutzer in seiner bekannten WiFi-Bereich,bekommt er an seiner bekannten WiFi. Da WLAN ist immer ausgewählt und als Standard-route,android schaltet auf WLAN und ich bekomme das Netzwerk Benachrichtigung, dass das WLAN eingeschaltet ist.
So, ich update meine apps IP-Adresse WLAN IP Adresse, also keine Probleme hier. Aber immer noch mobile Daten verbunden ist, gleichzeitig aber getActiveNetworkInfo() sagt mir, dass ich verbunden bin mit dem WLAN klar auch wenn ich früh war verbunden mit mobilen Daten.
Also das problem ist, wenn der Benutzer schaltet die WiFi-Taste,und mobile Daten ist immer noch angeschlossen, aber ich bekomme noch immer die Meldung für das WiFi auszuschalten.
Es zeigt mir, dass die Netzwerkverbindung unterbrochen ist, selbst wenn mein Telefon ist immer noch verbunden mit mobilen Daten.
Aber nach einer Sekunde erhalte ich eine Benachrichtigung, mobile Daten verbunden ist.
Aber sobald ich den Sender empfangen getrennt, ich Schloss meine VoIP-Anruf.
Also, wenn ich eine Benachrichtigung erhalten, für WLAN ausgeschaltet, wie kann ich sicher stellen, ob mobile Daten verbunden ist.
Versuchte ich getActiveNetworkInfo (), aber es passiert null wenn ich eine Benachrichtigung erhalten, für WLAN ausgeschaltet.
Ich habe diese links:
Android API-Aufruf, um zu bestimmen, Benutzer-Einstellung "Daten Aktiviert"
Wie Sie sagen, wenn "Mobile Daten Netzwerk' aktiviert oder deaktiviert ist (auch bei Anschluss über WiFi)?
Über den obigen link bin ich in der Lage zu erkennen, dass die mobile Daten Taste aktiviert wurde, wenn der Benutzer die Verbindung mit mobiledata.es gibt mir true.
Aber das problem, geschieht wenn dieser spezielle Fall passiert.
Nun, wenn wifi deaktiviert ist bekomme ich die Benachrichtigung, aber es zeigt, dass mobile Daten deaktiviert, auch wenn meine mobilen Daten aktiviert sind. Ich bin nicht in der Lage, diese situation zu behandeln, wie ich trennen meine Anrufe, wenn ich meine Verbindung getrennt Meldung.
- Sie können eine pause von 1-2 Sekunden, wenn das WLAN getrennt wird. Und dann nach 1-2 Sekunden versuchen Sie es erneut markieren, wenn die Mobile Daten verfügbar sind oder nicht.
- ja, wenn es gibt keine Lösung im planen, gehen Sie für dieses
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nutzen, APIs der
ConnectivityManager
: besonders in Ihrem nutzen, falls Sie daran interessiert sind,registerDefaultNetworkCallback()
:Mein Gerät mit LTE in rund einer halben Sekunde.
Dies bedeutet, dass man nicht vorher wissen, ob der Geräte wird schließlich die Verbindung zum LTE-oder nicht zu der Zeit, wenn WIFI getrennt wird. So können Sie nehmen folgenden Ansatz: nach einer Aktion auf einem handler geschehen, in einer zweiten und bei dieser Aktion den Anruf abzubrechen. Wenn die Verbindung erscheint bald - Terminierung für ausgewählte aufheben zuvor gebuchten Aktion. Wenn Sie in
Runnable
code, dann die Verbindung war nicht rasch hergestellt, was bedeutet, dass Sie sollten das Gespräch beenden.Der Nachteil des Ansatzes ist, dass
registerDefaultNetworkCallback()
ab API 24. Es existiert nicht eine alternative inConnectivityManagerCompat
entweder. Verwenden Sie stattdessenregisterNetworkCallback()
, die verfügbar ist, aus der API-21.Können Sie
BroadcastReceiver
und registrierenNETWORK_STATE_CHANGED_ACTION
&WIFI_STATE_CHANGED_ACTION
.Update vergessen Sie nicht, unregisterReceiver
BroadcastReceiver
onDestroyisConnected
flag wird richten zwischen den alten und den aktuellen statusonReceive
Aktion.Meine Implementierung mit RxJava
Listener setup:
Die Nutzung der timer /Einweg-ermöglicht die Verzögerungen zwischen Schaltung Anschluss-Typen.
Die Antwort, die du suchst, ist ein
BroadcastReceiver
. Überprüfen Sie den link unten.BroadcastReceiver wenn die Wi-Fi-oder 3g-Netzwerk-Status geändert
Hoffe, es hilft Ihnen, Ihr Problem zu lösen und wenn dem so ist, bitte schließen Sie gegebenenfalls Ihre Frage.