Suche Handy programmierbar in Java Me für Bluetooth, WLAN und GPS.

  • Zitat

    Original geschrieben von Abi99
    Erlauben aber ein einkommendes Bluetooth-Objekt?:confused:

    der 'Absender' ist Ihnen vom Namen her vertraut und die meisten halten's für so'ne Art SMS und starten es. (Hinweisschilder gibt's auch ;) )
    Welche Entwicklungsplattform ich nehme, ändert nichts daran, dass nicht jedes Handy jeden Request unterstützt. Auch die Geräte ein und desselben Herstellers unterscheiden sich erheblich... und den habe ich ja bereits über die MAC, worüber ich die Handys auch wiedererkenne.
    Ich habe das übrigens (ähnlich blueVibe) nach Funktionen getrennt. Auf einer Funkstrecke werden nur die 'durchlaufenden' Geräte gescannt und nach bekannt/neu sortiert. Die andere 'BT-Funkzelle' bedient die authentifizierten Geräte.
    Den Besuchern wird eine Art Java-Fernsteuerung auf's Handy gepusht, mit der sie 'Objekte' fernsteuern können, denen sie sich gerade nähern oder umgekehrt ;-)
    Derzeit schicken wir jedem Besucher am Eingang die passende App von Hand auf's Handy - ziemlich uncool.

  • Inquiry


    Bei mir reicht eine Zeit von ungefähr 10 Sekunden zwischen den Inquiries, um ein quasi kontinuierliches Scannen durchzuführen.


    Mein letztes Problem waren try/catch abfragen, die das Programm zum Absturz brachten. Wurde das Inquiry nicht korrekt wieder gestartet, dann vertüdelte sich das Programm, da ein "Alert" ausgegeben wurde. Dieser kollidierte offensichtlich mit normalen Ausgaben. Auch deswegen finde ich JAVA ME ekelig.


    "protected int startDeviceSearch() {}" startet die Suche


    dann werden deviceDiscovered, servicesDiscovered, serviceSearchCompleted und inquiryCompleted quasi parallel abgearbeitet.


    public void deviceDiscovered( RemoteDevice remoteDev, DeviceClass devClass ) {}
    public void servicesDiscovered( int transID, ServiceRecord[] servRecord ) {}
    public void serviceSearchCompleted( int transID, int respCode ) {}
    public void inquiryCompleted( int discType ) {}


    Hinzu kommt, dass die Software/Hardware eine gewisse Zeit benötigt, um zurückgesetzt zu werden. Eine wirklich sichere Methode, um zu stoppen und neu zu starten ist mir bisher nicht unter gekommen.

    Wenn man das Unmögliche ausschließen kann, dann ist das, was übrig bleibt, nach aller Wahrscheinlichkeit die Wahrheit!

  • Zitat

    Original geschrieben von Gallium
    nicht jedes Handy unterstützt jeden Request

    Was ist denn ein „Request“?
    Wenn Du die Fernsteuerung auch über Bluetooth machst, Prost. Das ist wirklich alles extrem buggy und bei iOS sowieso Sackgasse.

    Zitat

    Original geschrieben von pn66pro
    Hinzu kommt, dass die Software/Hardware eine gewisse Zeit benötigt, um zurückgesetzt zu werden. Eine wirklich sichere Methode, um zu stoppen und neu zu starten ist mir bisher nicht unter gekommen.

    Welche Implementierung, welches Telefon? Ein sich laufend wiederholendes Inquiry können wirklich nur wenige KVMs. Meine Methode: Wird ein Gerät gefunden, nutze ich cancelInquiry um es gleich weiter zu Scannen (Friendly-Name bzw. SDP). Danach startet wieder die Inquiry.

  • Device Discovery


    Der DiscoveryListener ruft die Methode inquiryCompleted() auf, wenn die BT Geräte Suche (quasi ohne Fehler) beendet wurde. Dann wird programmtechnisch software/hardwareabhängig einen Moment gewartet, bevor die Methode startDeviceSearch() eine neue Suche startet (Getestet habe ich dies mit 5 bis 20 Sekunden). Hierbei sind zwei Fälle denkbar, startInquiry() ist erfolgreich oder startInquiry() ist nicht erfolgreich. Im ersten Falle startet die Suche automatisch neu, im zweiten Falle wird eine Fehlermeldung ausgegeben. Ist die Wartezeit nicht richtig eingestellt, so kommt es zu einer Fehlermeldung, da startInquiry() nicht möglich war. Ist startInquiry() dann wieder möglich, dann startet die Suche automatisch neu.


    Der Code, der das Neustarten durchführt ist einfach.


    Code
    int locvarERR = startDeviceSearch();
    if ( locvarERR != 0 ) {
    return;
    }


    Code
    protected int startDeviceSearch() {
    discoveryAgent = devLocal.getDiscoveryAgent();
    try {
    discoveryAgent.startInquiry( DiscoveryAgent.GIAC, this );
    } catch ( BluetoothStateException bsex ) {
    showErrAlert( "(BSE) Start Device Search: " + bsex.getMessage() );
    return -1;
    }
    return 0;
    }


    cancelInquiry() verwende ich, wenn ich die laufenden Suche "brute force" abbrechen will (Menüwechsel oder Programm Exit).


    Ich programmiere mit Java(TM) Platform, Micro Edition Software Development Kit 3.0 (kein NetBeans usw.). Getestet habe ich die Anwendung auf Nokia Series 40 Geräten.

    Wenn man das Unmögliche ausschließen kann, dann ist das, was übrig bleibt, nach aller Wahrscheinlichkeit die Wahrheit!

  • Ja, aber das kannst Du fallweise über getClass() umschiffen. Wobei ich mich (immer noch) frage, welche JSR Du brauchst.


    Konzentrierst Du Dich allein auf MIDP/CLDC und HTTP, kannst Du schon schöne Sachen basteln; auch für verschiedene Software-Plattformen. JSR-82, also das Package javax.bluetooth. bieten auch sehr, sehr viele Plattformen, leider aber sehr buggy und damit zeitaufwendig in der Anpassung.

  • Zitat

    Original geschrieben von Abi99
    WLAN kannst Du über J2ME quasi vergessen. Oder hast Du bereits ein Telefon dafür gefunden? Auch Bluetooth und GPS dauerhaft zu nutzen, dafür sind die KVMs einfach nicht geschrieben – ich habe Jahre gebraucht meinem Bluetooth-Scanner (einigermaßen) stabil zu bekommen. Ich würde kein J2ME mehr nehmen. iOS bietet Bluetooth nicht. Symbian und bada sind arge Nischen. Bleibt nur Android.

    Wie sieht es denn bei den Blackberrys aus? So ich recht verstanden habe, sollen die doch komplett mit JavaME programmierbar sein? Vielleicht hat da jemand Erfahrungen?

  • Symbian


    Hallo allerseits,


    ich bin bisher so weit gekommen, dass ich folgendes sagen kann. Wenn das entsprechende Handy (von Nokia) über Symbian und die entsprechenden JAVA APIs verfügt, dann funktionieren zumindest meine bisher geschriebenen JAVA ME Programme anstandslos. Somit kommen generell S40 und S60 Handys für mich infrage.


    Viele Grüße


    Peter

    Wenn man das Unmögliche ausschließen kann, dann ist das, was übrig bleibt, nach aller Wahrscheinlichkeit die Wahrheit!

  • Symbian tut zwar, aber wenn Du längere Zeit am Stück scannt wird Dich Symbian wahnsinnig machen. Stabil sieht wirklich anders aus. Besonders wenn ein RemoteDevice während irgendwas den Funkbereich verlässt, bleibt Symbian sehr lange „stehen“ und bricht einfach ewiglich nicht ab.

    Zitat

    Original geschrieben von pn66pro
    Der Code, der das Neustarten durchführt ist einfach.

    In der Series 40, ja. Du kannst übrigens zum Debuggen auch die Nokia Series 40 SDKs benutzen. Die sind sehr nahe am echten Gerät.

    Zitat

    Original geschrieben von pn66pro
    cancelInquiry() verwende ich, wenn ich die laufenden Suche "brute force" abbrechen will

    Eine Suche ist sehr lang. Willst Du weitere Informationen über das Gerät ziehen, wie den langen Namen oder die Services erkennen, dann sind viele Geräte oft schon aus Reichweite. Daher (mit nur einem Bluetooth-Chip wie bei Dir im Mobiltelefon): Gerät gefunden, Suche abbrechen, abfragen, weiter suchen.


    Diese andere DevClass ist für mich ebenfalls ein Rästel; kann ich Dir nicht erklären.

  • Hallo Abi99,


    die beiden BT Klassen, die ich sehen kann, sind merkwürdig. Eine Lösung habe ich bisher nicht. Die BT Spezifikation kennt diese Klassen offensichtlich nicht.


    Zitat


    Eine Suche ist sehr lang. Willst Du weitere Informationen über das Gerät ziehen, wie den langen Namen oder die Services erkennen, dann sind viele Geräte oft schon aus Reichweite. Daher (mit nur einem Bluetooth-Chip wie bei Dir im Mobiltelefon): Gerät gefunden, Suche abbrechen, abfragen, weiter suchen.


    Das Problem habe ich dadurch umschifft, dass ich verschiedene Module für verschiedene Anwendungen habe. Das sieht z.B. so aus:


    Modul 1: Loggen von FDN, MAC und der Klassen (soweit kein Problem, da es nur eine begrenzte Anzahl laut Spezifikation gibt)
    Modul 2: Abfrage der Services eines speziellen Gerätes in Reichweite über ein Auswahlmenü
    Modul 3: Überwachung von 1 bis 3 MAC's bezüglich ihrer Aktivität


    usw. usw.


    Wie Du richtig sagst, gibt es eben keinen Königsweg. Wenn ich alle verfügbaren Daten (auswerten) loggen wollte, dann bin ich zu langsam bzw. das Programm.


    Viele Grüße


    Peter


    P.S.: Mit dem Symbian 5th Edition S60 Gerät, welches ich besorgt habe, bin ich soweit zufrieden. CBS, Bluetooth und GPS läuft anstandslos. Gut finde ich die Möglichkeit, in Python programmieren zu können. Nervig sind bisher einzig die Permissions der Java ME Apps.

    Wenn man das Unmögliche ausschließen kann, dann ist das, was übrig bleibt, nach aller Wahrscheinlichkeit die Wahrheit!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!