Roaming-Erkennung in Android

8

Ich versuche herauszufinden, wann die Roaming-Aktivierung erfolgt. Bis jetzt habe ich das folgende Stück Code benutzt, aber weil ich es nicht testen konnte, bin ich mir dessen Korrektheit nicht bewusst.

%Vor%

Ich habe dies geschrieben und denke, dass sich die Signalzelle ändern muss, damit das Roaming aktiviert wird. Bitte lassen Sie mich wissen, ob mein Abzug korrekt ist oder nicht, und wenn nicht, wie kann ich dies erreichen?

    
klaus johan 03.03.2010, 18:10
quelle

6 Antworten

15

Ich denke, dass Sie isRoaming () in der NetworkInfo-Klasse verwenden möchten. Aber zuerst möchten Sie einen Change-Broadcast-Listener registrieren:

%Vor%

Dies gibt Ihnen einen Aktionsnamen: ConnectivityManager.CONNECTIVITY_ACTION

%Vor%

[Bearbeiten: bekanntes Problem] HINWEIS: Es scheint einen Fehler bei bestimmten Versionen zu geben, wobei getActiveNetworkInfo () beim Roaming null zurückgibt. Siehe hier: Ссылка

Ich hoffe, das hilft!

Emmanuel

    
Emmanuel 04.11.2010 20:05
quelle
12

Sie können auch auf isNetworkRoaming() im TelephonyManager testen, wenn Sie wissen möchten, ob Voice Roaming vorliegt, selbst wenn der Empfänger von android.net.conn.CONNECTIVITY_CHANGE ausgelöst wird. Ich denke, das wird auch den Fehler vermeiden, wenn getActiveNetworkInfo() null zurückgibt.

%Vor%     
Gabriel 09.05.2012 15:13
quelle
2

Zuverlässige Methode zum Abrufen eines Ereignisses bei Änderungen des Roaming-Status ist

%Vor%

Wenn der Roaming-Status erkannt wird, wird PhoneListener mit der Methode serviceStateChanged benachrichtigt.

Ich habe dies durch einen Blick auf den AOSP-Quellcode bestätigt.

CDMA

Ссылка

CDMA LTE

Ссылка

GSM

Ссылка

Überprüfen Sie die Methode pollStateDone (), hier wird der Roaming-Status für den TelephonyManager

festgelegt     
AJAY PRAKASH 22.10.2014 21:57
quelle
0

In meinem Fall lausche ich bereits mit dem TelephonyManager und dem PhoneStateListener auf Netzwerkstatusänderungen, so wie der ursprüngliche Fragesteller, ob Roaming-Ereignisse dort entdeckt werden können.

(Dies wäre eine Alternative zur Verwendung der ConnectivityManager / NetworkInfo-Lösung in der akzeptierten Antwort.)

Um Änderungen zu erkennen, schlägt die ursprüngliche Frage vor, auf Veränderungen im Zellstandort zu achten, aber ich frage mich, ob dies mehr Ereignisse als nötig verursachen würde.

Ich würde mir vorstellen, dass eine Änderung des Roaming-Status nur bei einer Änderung des Netzwerkzustands auftreten kann.

%Vor%

Es gibt zwei Einschränkungen für diese Methode, aber ich denke, dass die ConnectivityManager-Lösung (in der akzeptierten Antwort) die gleichen Probleme hat:

  1. Ich höre auf Änderungen im Datennetzwerkzustand. Wenn der Benutzer keine Datenverbindung herstellt (zB sind sie nur Sprachroaming), dann wird es nicht funktionieren, aber ich denke nicht, dass dies ein Problem ist, weil die meisten von uns versuchen, Datenroaming zu erkennen (z. B. unsere Apps) Verwenden Sie keine Daten, wenn sich der Benutzer im Roaming befindet.

  2. Ich bin mir nicht sicher, ob sich der Datenverbindungszustand ändern muss, wenn der Benutzer anfängt zu roamen - es ist nur meine Theorie und ich wäre daran interessiert zu hören, ob es jemand besser weiß.

Abschließend möchte ich noch hinzufügen, dass es möglich ist, PhoneStateListener :: onServiceStateChanged () anzuhören, die beste Lösung von allen zu sein: einfach und mit den wenigsten unnötigen Ereignissen (dies sollte selten ausgelöst werden), aber ich finde die Dokumente mehrdeutig und kann nicht feststellen, ob das PSL-Ereignis für eine Änderung in einem der Attribute des ServiceState-Objekts ausgelöst wird (z. B. einschließlich Roaming) oder nur für das Dienststatusattribut des ServiceState.

    
Tom 08.07.2012 15:58
quelle
0

Mit Android 5.1 Update gibt es jetzt eine sehr einfache Roaming-Erkennung: Verwenden Sie einfach den SubscriptionManager und erhalten Sie Roaming-Informationen von SubscriptionInfo getDataRoaming () . Wenn mehrere SIMs vorhanden sind, wird nur die Information von aktivem zurückgegeben, was praktisch ist.

    
lomza 11.03.2015 08:19
quelle
-2

Dies funktioniert perfekt ohne irgendwelche lissenten 1 für Roaming und 0 für Nonroaming

%Vor%     
Srishti Roy 10.07.2015 07:47
quelle

Tags und Links