2012-09-26 13 views
8

stworzyłem BroadcastReceiver który nasłuchuje zdarzenia CONNECTIVITY_CHANGE. Na razie wydrukuję tylko akcję Intent, która wywołuje BroadcastReceiver i jej dodatki. Używam telefonu testowego w naszym biurze tutaj w Manili, a karta SIM pochodzi z Danii. Kiedy onReceive() jest wywoływana, to co zostanie wydrukowane w LogCat:Wykrywanie podczas roamingu jest wyłączony w Androidzie

action: android.net.conn.CONNECTIVITY_CHANGE 
key: extraInfo, value: data.tre.dk 
key: htcCurrentActiveNetwork, value: null 
key: networkInfo, value: null 
key: reason, value: roamingOn 
key: noConnectivity, value: null 
key: inetCondition, value: null 

muszę wiedzieć, jaka jest wartość reason jest, gdy w roamingu gaśnie - może być roamingOff zgadując, ale nie mogę wiedzieć na pewno, chyba że pojadę do Danii. Dzieje się tak, ponieważ muszę wykonać zadanie, gdy usługa roamingu zostanie wyłączona, i zauważyłem z LogCat, że zdarzenie CONNECTIVITY_CHANGE jest uruchamiane z powodów innych niż przełączanie trybów roamingu. A może jest lepszy sposób na wykrycie, kiedy roaming jest wyłączony?

Kod odbiornika transmisji:

public void onReceive(Context context, Intent intent) { 
    Log.d(This.LOGTAG, "action: " + intent.getAction()); 
    Bundle extras = intent.getExtras(); 
    for (String key : extras.keySet()) { 
     Log.d(This.LOGTAG, "key: " + key + ", value: " + extras.getString(key)); 
    } 
} 

Oczywisty wpis:

<receiver android:name=".listener.RoamingListener"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

Odpowiedz

1

Jest różnica między roamingu sieci i danych w roamingu.

Generalnie roamingu sieci jest umożliwienie swoją Telco przejść przez satelity trzecich, gdy jesteś poza granicami kraju, dzięki czemu można pozostawać w kontakcie z ich usług. Nawet jeśli już powiedziałeś swojemu operatorowi, że chcesz zasubskrybować roaming sieciowy, NIE zostanie on aktywowany, dopóki nie zaczniesz łączyć się z zewnętrznymi satelitami telekomunikacyjnymi, a dzieje się tak tylko wtedy, gdy jesteś poza krajem.

transmisji danych w roamingu jest po prostu pozwalając/zabronienie urządzenia zużywają danych mobilnych, gdy jesteś w trybie roamingu sieci. Jest on bardziej zależny od urządzenia i możesz go łatwo włączyć lub wyłączyć w aplikacji Ustawienia telefonu.

W skrócie, jeśli chcesz, aby wykryć roaming w sieci, korzystać TelephonyManager.isNetworkRoaming(). Jeśli chcesz sprawdzić, czy roaming danych jest włączony lub wyłączony, użyj Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING).

WAŻNE: Nie przetestowałem osobiście poniższych scenariuszy i nie jestem pewien, jaką wartość zwróci wartość isNetworkRoaming().

  1. Nie poinformować swojego domu Telco, aby włączyć sieć roamingu, ale kiedy przybył do jakiegoś innego kraju, telefon zaczął wykrywania innych sieci Telco.
  2. Po scenariuszu 1 telefon wyświetli monit o wybranie jednej z wykrytych sieci telekomunikacyjnych do połączenia. Ty wybierasz jeden i telefon próbuje się połączyć. Nie wiem, jaką wartość zwróci tutaj isNetworkRoaming(), ponieważ w pierwszej kolejności nie subskrybujesz roamingu sieciowego.
0

można po prostu skorzystać z tej linii do wykrywania stanu Roaming:

Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING) 

ten łania nie potrzebują żadnych specjalnych uprawnień ani odbiorników.

Source

+0

Właśnie zarejestrowałem wynik tej linii wraz z wynikiem 'TelephonyManager.isNetworkRoaming()'.Dowiedziałem się, że 'Settings.Secure.DATA_ROAMING' może zwrócić' 0' (co oznacza, że ​​roaming danych jest wyłączony), podczas gdy 'isNetworkRoaming()' ma wartość "true". Zgaduję, że to dlatego, że Telco nadal znajduje się w trybie roamingu sieciowego, ale nie pozwalam urządzeniu korzystać z mobilnego internetu. Wygląda na to, że są to różne przełączniki i jestem w trybie roamingu sieciowego. –

+0

A co chcesz wiedzieć? Przypuszczam, że 'TelephonyManager.isNetworkRoaming()' pokazuje, że jesteś w roamingu, a ustawienie pokazuje, czy możesz używać Internetu w roamingu – Jin35

+0

Jestem po trybie roamingu sieciowego, ponieważ próbuję zmierzyć następny miesięczny rachunek użytkownika-- a obejmuje to nie tylko ilość danych mobilnych wysyłanych/odbieranych za pośrednictwem roamingu danych. –

Powiązane problemy