Mehrere Heimnetze/Datenroaming fallweise erlauben...

  • 44 Antworten
  • Letztes Antwortdatum
licht77 schrieb:
@App: Ja kommt in den Market - und nein zu den Kosten, ich bin eher ein Freund von freier Software.

Locale kostet...
 
Stimmt schon...

Nur hab ich eben Locale gekauft. Ich denke einfach, dass, wenn man sich dafür ein Plugin bastelt, man nicht auf den Akkuverbrauch achten muss, da das eh die Main-Applikation macht.

Wenn man es selbst programmiert, ist das natürlich eine sehr gute Übung, aber man muss dann eben auch auf alles achten, damit die App schlank und schnell ist und wenig Akku verbraucht.

Ich werd natürlich deine App ausprobieren, wenn du mir eine Version schickst, doch mit einem Locale-Plugin wäre ich persönlich glücklicher.

Und natürlich bin ich froh, dass überhaupt in die Richtung etwas passiert.

Chris
 
So, ich bin fertig mit meiner Locale-Condition. Ich werd Sie mal testen und dann sehen, wie ich sie verbreite.

Man kann mit dieser Condition mehrere Netzbetreiber-Strings definieren. Wenn einer davon Zutrifft, wird die Bedingung aktiv.

Das Vorgehen als Drei-Kunde (so wie ich einer bin) würde so aussehen:
In den "Grundeinstellungen" von Locale alle APNs deaktivieren (muss noch sehen wie das Plugindazu heißt). Dann mit meiner Condition, die Netzbetreiber angeben, bei denen man die APNs wieder aktivieren will.
Dazu eine Situation definieren ("Drei" z.B.). Dann die "CarrierID" Bedingung wählen und als Wert "3 AT;3" eingeben (ohne den Anführungszeichen versteht sich). Und als Einstellung die APNs wieder einschalten.

Ich werd jetzt Mal testen, ob das so funktioniert, wie ich das möchte und dann meld ich mich wieder.


Chris

P.S.: Mit APNdroid lassen sich die APNs sehr komfortabel über Locale steuern.

P.P.S: Es ist jetzt im Market erhältlich! Unter "Locale CarrierID Plugin". :cool2: Link zum Market
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: mff
Hi,

erstmal danke für den Beitrag/Thread, habe genau das gleiche Problem mit meinem Desire bei Drei. Ich war auch schon im Shop, um zu fragen, ob sich reines Datenroaming im Ausland deaktivieren ließe, das wäre meiner Meinung nach die optimale Lösung, geht aber anscheinend nicht. Kurze Frage zu den CarrierIDs - du schreibst:

Ich frage aus folgendem Grund: Ich wohne in Österreich und benutze den Provider 3 Hutchinson. Dieser bietet zwei Netze: Einerseits "3 AT", welches das schnelle HSDPA Netz ist und das Netz "3", welches für EDGE Verbindungen benutzt wird
Ich denke - und ich bin durch ausgiebige Recherche schon darin bestätigt worden, dass das Netz "3" nur die Umleitung zu einem Partnernetz ist, da 3 Hutchinson in Österreich nur UMTS/HSDPA anbietet und für die GSM/GPRS-Adeckung einen Partner hat.

Wenn ich nun im "3 AT" Netz (das schnelle, vom Provider selbst) eingebucht bin, ist alles in Butter.
Verliere ich nun die Verbindung, bucht sich das Milestone ins "3" Netz (das Partnernetz) ein und zeigt das als aktives Roaming an. Auch die Datenverbindung wird deaktiviert.

Sowohl im "3 AT" Netz, als auch im "3" Netz fallen KEINE Roamingkosten an.
Bei mir steht irgendwie bei beiden Netzen nur "3" als Carrier-String. Also beim regulären 3-Netz mit HSDPA-Empfang, aber auch wenn ich das Telefon auf GSM stelle und dadurch nur GPRS-Empfang übers A1-Netz möglich wird (und oben bei der Netzanzeige ein "R" für Roaming angezeigt wird). Wollte ich nur mal anmerken, vielleicht kanns ja ein anderer Desire-Nutzer bestätigen.

Deine Lösung werde ich mir auf jeden Fall ansehen, müsste eigentlich für das Plugin egal sein, ob bei beiden Netzen der gleiche String aufscheint (die Condition trifft ja zu), oder?

Cheers
 
Ja, es ist dem Plug-in egal, was man als CarrierID einstellt. Man hat Datenroaming immer erlaubt, aber sobald der Carrier-String anders ist, als der eingestellte, stellt die Locale-CarrierID-APNdroid-Combo die Datenverbindung ab.

Problem solved :cool2:

Chris
 
Super :)

Andere Frage: wärs evtl. möglich den Source für dein Plugin zu bekommen? Will ein bisschen in Android-Entwicklung eintauchen, und sowas geht immer am besten mit konkreten Beispielen :)
 
Nun ja... Erstens hab ichs als Paid-App in den Market gestellt und zweitens ist ein Locale Plug-in nicht gerade ein Einsteiger-Paradebeispiel, wie ich feststellen musste.

Ich kann dich aber auf die beiden frei verfügbaren Beispiele einer Locale Condition und eines Settings unter Locale Developer Resources verweisen.
Das Displaybeispiel habe ich größtenteils als Vorlage/Grundgerüst genutzt.

Ich würde an deiner Stelle, und das werde ich selbst auch tun, mir gute Literatur besorgen (Android 2: Grundlagen und Programmierung: Amazon.de: Arno Becker, Marcus Pant) und mir einige gute Beispiele auf Google Code ansehen. Auch das Beginnen mit einfachen Anwendungen ist eine gute Vorgehensweise (Input/Output Sachen, also sowas wie ein Rechner, ein Einheitenumrechner, eine Personen-/Auto-/Lebensmittel-/Wasweißich-Datenbank, etc.).

Wie schon erwähnt, möchte ich den kompletten Source meiner Anwendung nicht hergeben. Aber ich kann sagen, dass ich beim dem Display-Beispiel im QueryReceiver die Prüfbedingung ausgetauscht habe und anstatt des BackgroundService einen BroadcastReceiver verwende, um auf eine Änderung des Carrier-Strings zu reagieren.
Natürlich habe ich auch die EditActivity angepasst und aus dem Spinner ein Textfeld gemacht, aber das kann man ja eh in der Anwendung direkt sehen.


Wenn du dir das Locale-Beispiel ansiehst, kann ich dir insofern weiterhelfen, als dass ich kurz beschreibe, wie die Zusammenhänge sind:

In der EditActivity wird ein Wert eingelesen und am Ende über ein Bundle, welches an einem Intent hängt, das gebroadcastet wird weitergegeben. Die Speicherung, Verabeitung, etc. übernimmt Locale selbst.

Im BackgroundService wird ein BroadcastReceiver am Leben erhalten (immer wieder gestartet, wenn er aus dem System fliegt), der auf eine Änderung des Display-Status reagiert.

Sobald vom System eine Änderung bekannt wird, Broadcastet der Recevier im Service ein Intent, welches von Locale aufgenommen wird. Locale wiederum spricht nun über ein eigenes Locale-Intent den QueryReceiver an, welcher die Bedingung prüft.
Dieser meldet am Ende der Prüfung RESULT_CONDITION_SATISFIED, RESULT_CONDITION_UNSATISFIED oder RESULT_CONDITION_UNKNOWN an Locale zurück.

In aller kürze funktioniert also die Zusammenarbeit der Komponenten so:

Das Setzen der Bedingung:
"EditActivity" -> "Locale"

und die Prüfung:
"Änderung im System" -> "BackgroundService(BroadcastReceiver)" -> "Locale" -> "QueryReceiver" -> "Locale"

Die Kommunikation erfolgt dabei über gebroadcastete Intents und die Bundles, die daran hängen.

Chris

P.S.: Bin selbst noch Anfänger, aber so hab ich das verstanden... ;)
 
Hi,

Da ich derzeit in Sardinien bin und ich mir aus Faulheit das händische Umschalten von Datenroaming ersparen wollte, habe ich gestern Dein Locale-PlugIn gekauft... :winki:

Mein Netz ist, wie Deins, 3 und da wir ja bei 3 LikeHome zu selben Bedingungen wie im Heimatnetz telefonieren und surfen, wollte ich erreichen, das dies automatisiert wird.

Ich habe bei Locale in den Grundeinstellungen per APNdroid das Datenroaming ausgestellt und dann eine Bedingung per 'NetzbetreiberID' eingefügt, das bei dem Betreiberstring '3;3 LikeHome' ('3' in Österreich, '3 LikeHome' in allen sonstigen Ländern, die das unterstützen) das Datenroaming mittels APNDroid aktiviert wird....

Leider funktioniert das Ein- und Ausschalten in den zwei Tagen, in denen ich die Locale-Bedingung jetzt laufen habe nur sehr unzuverlässig - manchmal wird das Datenroaming bei einem Betreiberwechsel aus- aber nicht wieder eingeschalten oder umgekehrt. Habe ich da prinzipiell etwas falsch eingestellt bei meiner Bedingung oder funzt da sonst was nicht?

Hast Du vielleicht einen Tipp für mich?

Bin noch bis 17.09. hier in Monte Nai/Sardinien und hätte also noch genug Zeit zum austesten... :smile:
 
Hmmm.... Also erstens muss der Carrier-String stimmen. Leerzeichen davor, danach, und dazwischen machen einen Unterschied.

Ich selbst verwende es auf einem Milestone und muss sagen, dass ich mit der Funktionalität zufrieden bin.

Normalerweise müsste Locale bei jedem Betreiberwechsel (also jeder Connectivitätsveränderung um genau zu sein) die Bedingung überprüfen. Ich habe jedoch die Erfahrung gemacht, dass wenn so ein Wechsel sehr oft passiert, Locale sich weigert die Bedingung erneut zu prüfen.

Es steht in deren API:
Locale API schrieb:
Locale makes no guarantees as to how often or if your plug-in will be queried. Typically, a plug-in will be queried once when Locale first starts up, and additional queries may happen somewhere on the order of every 10 minutes. If a situation in Locale contains multiple conditions, the order in which conditions are queried is unspecified. Locale may choose to stop evaluating conditions in a situation if one condition is not satisfied, at which point a plug-in may never be queried.

Dagegen kann ich eher wenig ausrichten. Ich muss mir noch etwas einfallen lassen, um diese "Unzuverlässigkeit" (so nennst du es, und so empfinde ich es auch) raus zu bekommen. Ich denke ich muss mich mit dem Locale Developer mal kurzschließen, um herauszufinden, ob man eine Prüfung der Bedingung erzwingen kann. Ansonsten muss ich wahrscheinlich einen Backgroundservice implementieren der ständig die CarrierID im Auge hat. Das habe ich zZt. noch vermieden um Arbeitsspeicher, CPU-Time und somit Akku zu sparen.

Um im Log selbst nachzusehen ob irgendwas faul ist:

Hole dir bitte Mal "aLogCat" und schau mal in den Log hinein. Ein Filter nach "CarrierCondition" müsste den Log meiner Anwendung ausgeben. Sollte der Provider von meinem Plugin aus irgend einem Grund abgelehnt werden, dann stünde das dort. In dem Log sieht man auch, wann er prüft, welchen Betreiber er findet und ob eine Übereinstimmung gefunden wird.

Wenn du einen Laptop hast, ist es noch besser: Einfach den aktuellen SDK Starter Kit holen, USB-Treiber installieren und Handy anstecken. In den Ornder vom SDK wechseln, den Ordner "Tools" öffnen und "ddms.bat" ausführen. Da sieht man den Log sehr schön und Live. Auch ein Filter nach "CarrierCondition" lässt sich einstellen.

Soltest du nicht zufrieden mit der App sein, kann ich dir natürlich den Kaufpreis zurückerstatten.

Grüße,
Chris

Hier noch kurz ein Screenshot vom DDMS von meinem Milestone. Wie man im Log sieht, gehts bei mir...
Es wird bei mir übrigens alle 10 Minuten geprüft (gelb markiert), da ich zZt. keinen Betreiberwechsel hatte (bin in Arbeit). Der 10 Minütige Check kommt von Locale her, nicht von meiner App.
ddms.png
 
Zuletzt bearbeitet:
Hi Chris,

Also erstmal von 'Geld zurück erstatten' kann keine Rede sein, wir werden das schon hinbringen! ;-)

Die Carrier-Strings sollten eigentlich stimmen - zu Hause ist es '3' und hier in Sardinien (und auch sonst) ist es '3 LikeHome', das habe ich dreimal kontrolliert.

IMHO hängt es wirklich mit der Abfrage zusammen, wenn ich z.B. bei einem falschen Status (Internet off obwohl CarrierID '3 LikeHome' ist) Locale aufrufe, wird sofort richtig umgeschaltet.

Manchmal tut es nur absolut nichts - heute früh noch den Market gecheckt, dann das Telefon weggelegt und an den Strand gegangen. Vor ca. einer Stunde zurück gekommen - CarrierID steht auf '3 LikeHome' und trotzdem steht der Internet-Zugriff auf 'Off'?!?

D. h. irgendwann hat das PlugIn mittels APNdroid das Internet ausgeschaltet, aber nicht wieder eingeschaltet, als die CarrierID eigentlich wieder gestimmt hat!

Sent from my HTC Desire using Tapatalk
 
Sehr komisch. Hm... ich fürchte ich muss die Carrier-Überwachung als Persistent Service implementieren. Nachteil dabei ist halt, dass dieser (zwar kleine und schlanke) Prozess ständig im System herumhängt. Dafür würde aber die Überwachung "lückenloser" funktionieren...

Naja, wahrscheinlich nehme ich mir das Wochenende mal dafür Zeit.

Chris
 
Hi,

Wie schon gesagt - bis 17.09. kann ich das hier vor Ort in Sardinien noch testen! :smile:

Blöderweise ist die Versorgung mit '3' hier an der Costa Rei ziemlich lückenlos, so kann ich keinen erzwungenen Providerwechsel machen - wir sind aber auch mit unseren Motorrädern unterwegs, vielleicht kann ich da das Problem noch eingrenzen...
 
Ja, über Feedback wäre ich sehr froh. Vielleicht kann ich mir einen Backgroundservice doch sparen.

Chris
 
So. Werde in Kürze ein Update einspielen.

Changelog:

- BroadcastReceiver entfernt
- BackgroundService eingefügt um eine lückenlose Überwachung zu ermöglichen. Leider ist diese Maßnahme nicht so Speicher- und damit Akkuschonend, wie die implementierung mit dem Receiver, jedoch schont eine lückenlosere Überwachung das Geldbörserl ;)

Chris


Edit:
Update wurde eingespielt und ist im Market verfügbar. Ich bin zZt. im Zug und konnte mehrere Betreiberwechsel beobachten. Die Anwendung hat praktisch sofort auf die neue Situation reagiert. Ich denke nun ist das Ziel erreicht.

Edit2:
Habs nochmals geupdated, da es zu schnell reagiert hat: Ich musste den Fall abfangen, dass gerade kein Carrier-String auszulesen ist, da Android gerade beim Netzwechsel ist. Jetzt sollte es das tun, was man (und auch ich) davon erwartet.

Chris
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Rofor
Hi Chris,

Heute hat das Tool (Version 0.3, also ohne Background-Service) tadellos funktioniert und morgen kann ich das Ganze mal bei einer Motorradtour hier in Sardinien nochmals testen - dann werde ich entscheiden, ob ich auf die neuere Version mit dem Backgroundservice update... :smile:

Danke jedenfalls für Deine Bemühungen - das Ganze sollte unsere Urlaube in Südtirol und Sardinien auf jeden Fall erleichtern! :cool2:
 
Hi,

Tja, aus der geplanten Motorradtour ist wegen einem technischen Defekts leider nichts geworden, aber ich konnte die App diesmal von Monte Nai nach Cagliari und retour beobachten:

Nach dem Verlassen des Funkraumes von '3 LikeHome' und dem Einbuchen in ein anderes Netz hat die App sehr schnell den Datenzugang abgedreht - das hat gut funktioniert!

In Cagliari selbst war dann wieder '3' - zurück auf Daten wurde allerdings nicht, auch nicht, als wir wieder zurück in Monte Nai waren und hier flächendeckend '3' ist. Auch nach vier Stunden dann kein automatisches Umschalten. Ich habe dann einmal 'Locale' gestartet und es wurde prompt umgeschalten.

Ich habe jetzt doch auf die Version 0.4b upgedatet - mal sehen, wie sich die verhält! :)

Kannst Du schon eine Aussage in Sachen Batterie machen?
 
Also die App geht recht gut bei mir, hoffe du kannst das bestätigen.

Bezüglich Akku: Ich nutze Locale recht intensiv, also auch mit Standortbedingungen über WLAN-Netze und GPS, etc. Ich konnte mit dem neuen Backgroundservice keine Verschlechterung der Akkulaufzeit feststellen.

Ich habe die Funktionalität des Services auch, meiner Meinung nach sehr sauber implementiert. Deshalb erwarte ich auch keine besonderen Akkueinbußen.

Im Akkuverbrauchsmonitor (Menü->Einstellungen->Telefoninfo->Akkuverbrauch) scheint weder Locale, noch meine Anwendung auf. Der verbrauch ist also nicht erwähnenswert (unter 1%).

MfG, Chris
 
Hi Chris,

Bis jetzt problemlos, musste allerdings auch noch nichts switchen... ;-)

Jetzt nachmittags muss ich mein Motorrad vom Mechaniker in Cagliari holen, dann werden wir ja sehen, ob es brav hin- und herswitcht! :)

Sent from my HTC Desire using Tapatalk
 
So - jetzt wurde das PlugIn einmal so richtig getestet. :)

Mein Fazit:
Das Abschalten des Internet-Zugriffes, wenn in eine 'fremde' Zellen gewechselt wird, funktioniert prompt und sehr rasch - beim Wechsel in ein '3'-Netz ist es leider purer Zufall, ob der Internet-Zugang wieder aktiviert wird oder nicht...

Ruft man allerdings einmal kurz Locale auf, wird sofort per APNdroid das Internet wieder aktiviert - prinzipiell funktioniert also alles wie es soll!

Es scheint hier ein Problem mit der Erkennung des 'richtigen' Netzes zu geben - allerdings befürchte ich, das das in diesem Fall aufgrund der ja nur virtuell bestehenden Betreiber-ID '3 LikeHome' ist. Der wirkliche Name des Netzbetreibers hier wird wohl ein anderer sein und darin liegt IMHO das Problem!

Ich werde mal als Betreiber-ID 'H3G Italy' versuchen, ich glaube so heißt '3' hier wirklich...

Sent from my HTC Desire using Tapatalk
 
Hmmm - 'H3G Italy' hat auch nix gebracht, auf das reagiert das PlugIn gar nicht und sperrt den Datenverkehr sofort,

Keine Ahnung, warum das PlugIn zwar den Wechsel in ein Fremdnetz sofort, aber den Wechsel zurück in ein Netz aus der Ausnahmen-Liste manchmal schon und manchmal gar nicht erkennt?! :-o

Sent from my HTC Desire using Tapatalk
 

Ähnliche Themen

T
Antworten
3
Aufrufe
1.807
-FuFu-
-FuFu-
D
  • Danny08
Antworten
12
Aufrufe
1.766
-FuFu-
-FuFu-
T
  • Timo1983
Antworten
14
Aufrufe
2.096
-FuFu-
-FuFu-
Zurück
Oben Unten