GSM Zelle ausgeben ?

  • Antworten:10
  • Bentwortet
Mathias Dorn
  • Forum-Beiträge: 19

17.04.2011, 19:56:06 via Website

Hi,
ich möchte für eine funktionalität meiner app die aktuelle ID der GSM Zelle ausgeben
ich hab natürlich geschaut wie es gehen sollt und mich eig auch daran gehalten ( GsmCellLocation | Android Developers )

hier mein sniplet

1GsmCellLocation CellLocation = new GsmCellLocation();
2Integer i = CellLocation.getCid();
3textView.setText(i.toString());

dummerweise gibt der mir die ID -1 aus (es konnte also keine zelle ermittelt werden) und ja ich habe das auf meinem tel getestet und nicht im emulator

was mach ich falsch ?

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

17.04.2011, 19:59:47 via App

Meine erste Idee: Fehlen dir vielleicht Permissions?
Lg Ansgar
edit: Idee 2: Vielleicht hat dein Handy kein GSM beim Testen, sondern HDSPA?

— geändert am 17.04.2011, 20:01:57

Antworten
Mathias Dorn
  • Forum-Beiträge: 19

17.04.2011, 20:11:33 via Website

danke für die schnelle antwort...
Permission habe ich wirklich nicht gesetzt - seh ich bei google welche ich setzen muss ? bzw wo seh ich überhaupt, wenn ich ne permission setzen muss

edit: jedes handy unterstützt GSM - das is das 2G netz ;)

— geändert am 17.04.2011, 20:38:13

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

17.04.2011, 20:42:45 via App

Wenn du dir die Dokumentation zu der Klasse, die du da nutzt durchliest, solltest du das finden..
Mir schon klar, was gsm ist, dachte nur, wenn du schnelles Internet (3G oder so) hast, das er dann kein GSM Turm hat.. Hab da keine Ahnung von^^
Lg Ansgar

Antworten
Mathias Dorn
  • Forum-Beiträge: 19

17.04.2011, 21:05:09 via Website

nunja dann schein ich für GSM Cell ID keine permission setzen ... ich dacht du hast was gesehen ich les davon nix

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

17.04.2011, 21:33:39 via App

Hm,
gibt dir getPsc() denn was aus, wenn -1 beim anderen kommt?
Lg Ansgar

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

17.04.2011, 21:35:14 via Website

Du benötigst die Permission:

android.permission.READ_PHONE_STATE

Gesetzt werden muss: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

— geändert am 17.04.2011, 23:28:21

lg Voss

Antworten
Mathias Dorn
  • Forum-Beiträge: 19

17.04.2011, 21:41:44 via Website

alles -1 .... was mich auch stutzig macht, ist

public GsmCellLocation ()
Since: API Level 1
Empty constructor. Initializes the LAC and CID to -1.


also denk ich mir, das ich irgendwie zugriff aufs netz brauch damit der construktor nicht mehr empty is ... keine ahnung so schwer kann es doch eigentlich nicht sein -.-

EDIT:
wo ließt du das ich die brauch ... naja hab sie gesetzt bringt aber trotzdem nichts

EDIT:
hab nach langen langen suchen evtl das richtige probiert.
1TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
2GsmCellLocation location = (GsmCellLocation) tm.getCellLocation();
3cellID = location.getCid();
4textView.setText(cellID.toString());

jetzt muss ich nur noch checken ob das auch die richtige ID ist

— geändert am 17.04.2011, 22:28:16

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

17.04.2011, 23:27:48 via Website

Ich muss mich entschuldigen,

Du brauchst natürlich diese Permission:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

Nicht wie oben gesagt die READ_PHONE_STATE ...

Sorry, ich war gedanklich in der falschen Abteilung.

Und ja, so wie Du es jetzt machst ist es korrekt.

lg Voss

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

18.04.2011, 07:25:51 via Website

der Mattn

1GsmCellLocation CellLocation = new GsmCellLocation();
2Integer i = CellLocation.getCid();
3textView.setText(i.toString());

Hätte mich auch sehr gewundert, dass das SO funktioniert.
Das wäre ein totaler Bruch im Stil der API.

Ich initialisiere ein Objekt über den Default-Konstruktor und es füllt sich automatisch mit allen Daten, die es braucht?
Mir fällt nichts (außer vielleicht java.util.Date) ein, was in Android, oder Java so funktioniert.
Sowas läuft eigentlich IMMER über Factories, Manager, oder zumindest, indem der App-Kontext an den Konstruktor übergeben wird.
Das Objekt muss seine Daten ja irgendwo her beziehen und dafür braucht es einen Einstiegspunkt (Kontext), oder muss von einer Factory extern initialisiert werden.

Nur mal so als Hinweis, damit du in Zukunft ein besseres Gefühl dafür bekommst welche Lösung schon von vornherein "falsch" oder "unwahrscheinlich" aussieht :)

— geändert am 18.04.2011, 07:27:17

Antworten
Mathias Dorn
  • Forum-Beiträge: 19

18.04.2011, 15:04:21 via Website

jap hatte die überlegung auch das die daten irgendwoher holen muss - (btw ich kenn auch nur date, welches das defaultmäßig macht^^)

— geändert am 19.04.2011, 12:28:56

Antworten