2012-09-26 3 views
8

ausgeschaltet ist Ich erstellte eine BroadcastReceiver, die für ein CONNECTIVITY_CHANGE Ereignis abhört. Für jetzt, drucke ich einfach die Aktion der Intent, die die BroadcastReceiver und ihre Extras nennt. Ich benutze ein Testtelefon in unserem Büro hier in Manila und die SIM-Karte kommt aus Dänemark. Wenn onReceive() aufgerufen wird, ist das, was in LogCat ausgedruckt wird:Erkennen, wenn Roaming in Android

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 

Ich muss wissen, was der Wert von reason ist, wenn das Roaming losgeht - roamingOff durch Erraten sein könnte, aber ich kann nicht wissen, sicher, außer ich gehe nach Dänemark. Dies liegt daran, dass ich eine Aufgabe ausführen muss, wenn der Roaming-Dienst ausgeschaltet wird, und ich habe von LogCat festgestellt, dass das Ereignis CONNECTIVITY_CHANGE aus anderen Gründen ausgelöst wird als durch Umschalten der Roaming-Modi. Oder gibt es eine bessere Möglichkeit zu erkennen, wenn Roaming ausgeschaltet ist?

-Code für den Rundfunkempfänger:

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)); 
    } 
} 

Manifest Eintrag: Diese

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

:

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

Antwort

1

Es gibt einen Unterschied zwischen Netzwerk-Roaming und Roaming-Daten.

Im Allgemeinen ermöglicht das Roaming im Netzwerk, dass Ihre Telefongesellschaft Satelliten von Drittanbietern durchquert, während Sie sich außerhalb des Landes befinden, damit Sie mit ihren Diensten verbunden bleiben können. Selbst wenn Sie Ihrer Telefongesellschaft bereits mitgeteilt haben, dass Sie sich für das Roaming im Netzwerk anmelden möchten, wird sie erst aktiviert, wenn Sie tatsächlich eine Verbindung über Telco-Satelliten von Drittanbietern herstellen. Dies geschieht nur, wenn Sie sich außerhalb des Landes befinden.

Beim Daten-Roaming wird Ihrem Gerät einfach gestattet, mobile Daten zu verwenden, während Sie sich im Netzwerk-Roaming-Modus befinden. Es ist mehr abhängig vom Gerät und Sie können es einfach in der App Einstellungen des Telefons ein- oder ausschalten.

Kurz gesagt, wenn Sie Roaming im Netzwerk erkennen möchten, verwenden Sie TelephonyManager.isNetworkRoaming(). Wenn Sie überprüfen möchten, ob Datenroaming aktiviert oder deaktiviert ist, verwenden Sie Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING).

WICHTIG: Ich habe die folgenden Szenarien nicht persönlich getestet und bin mir nicht sicher, welcher Wert isNetworkRoaming() zurückgibt.

  1. Sie haben Ihrer Heim-Telefongesellschaft nicht gesagt, dass sie das Netzwerk-Roaming einschalten soll, aber als Sie in einem anderen Land angekommen sind, hat das Telefon begonnen, andere Telekommunikationsnetze zu erkennen.
  2. Nach Szenario 1 fragt Sie Ihr Telefon, welches der erkannten Telco-Netzwerke sich verbinden soll. Sie wählen eine und das Telefon versucht eine Verbindung herzustellen. Ich weiß nicht, welchen Wert isNetworkRoaming() hier zurückgeben wird, weil Sie das Netzwerk-Roaming überhaupt nicht abonniert haben.
0

Sie einfach diese Zeile zum Erfassen Roaming Zustand verwenden können Damhirschkuh s brauchen keine besonderen Berechtigungen oder Empfänger.

Source

+0

Ich habe gerade das Ergebnis dieser Zeile zusammen mit dem Ergebnis von 'TelephonyManager.isNetworkRoaming()' protokolliert.Ich habe herausgefunden, dass 'Settings.Secure.DATA_ROAMING' eine '0' zurückgeben kann (was bedeutet, dass das Daten-Roaming ausgeschaltet ist), während' isNetworkRoaming() ''wahr' ist. Ich nehme an, das liegt daran, dass sich die Telekommunikationsgesellschaft immer noch im Netzwerk-Roaming-Modus befindet, aber ich erlaube meinem Gerät nicht, mobiles Internet zu nutzen. Sie scheinen verschiedene Switches zu sein, und ich bin nach dem Netzwerk-Roaming-Modus. –

+0

Und was willst du wissen? Ich nehme an, dass 'TelephonyManager.isNetworkRoaming()' zeigt, dass Sie sich im Roaming befinden, und zeigt an, ob Sie das Internet im Roaming verwenden können – Jin35

+0

Ich bin nach dem Netzwerk-Roaming-Modus, weil ich versuche, die nächste monatliche Rechnung des Benutzers zu messen-- und das schließt nicht nur die Menge der über Daten-Roaming gesendeten/empfangenen mobilen Daten ein. –