ブラックベリーコネクションナイトメア

私は、座標を計算に使用する携帯電話からサーバーにGPS座標を送信するプログラムを書くのに忙しいです。しかし、私はいつもブラックベリーと壁を打っています。私はAndroid Appを作りましたが、それは素晴らしいですが、実際のブラックベリーデバイスのサーバーに接続できないようです。私はシミュレータでアプリケーションをテストして、それは完全に動作しますが、実際の電話機にインストールすると、電話は必要ありません。

私はURLの最後に追加する秘密の文字列についてかなり読んだので、最初に利用できるトランスポートを得るのにいくつかのデモコードを適用しましたが、まだ何もありません...

アプリケーションは署名されています。通常、eclipseでデバッグするか、.jadファイルから直接デバイスにインストールし、アプリケーションに必要な権限を与えます。

現在のコードは、Blackberry SDKのHTTP接続デモから修正されました。

あなたは見て、私にいくつかの方向を与えることができますか?私はここであまりにも多くの髪を失っている...

実行し続けるバックエンドサービス:

public void run() {

        System.out.println("Starting Loop");

        Criteria cr = new Criteria();
        cr.setHorizontalAccuracy(Criteria.NO_REQUIREMENT);
        cr.setVerticalAccuracy(Criteria.NO_REQUIREMENT);
        cr.setCostAllowed(false);
        cr.setPreferredPowerConsumption(Criteria.NO_REQUIREMENT);
        cr.setPreferredResponseTime(1000);
        LocationProvider lp = null;
        try {
            lp = LocationProvider.getInstance(cr);
        } catch (LocationException e) {
            System.out.println("*****************Exception" + e);
        }
        if (lp == null) {
            UiApplication.getUiApplication().invokeLater(new Runnable() {
                public void run() {
                    Dialog.alert("GPS not supported!");
                    return;
                }
            });
        } else {

            System.out
                    .println(lp.getState() + "-" + LocationProvider.AVAILABLE);

            switch (lp.getState()) {
            case LocationProvider.AVAILABLE:
               //System.out.println("Provider is AVAILABLE");
                while (true) {
                    Location l = null;
                    int timeout = 120;
                    try {
                        l = lp.getLocation(timeout);
                        final Location fi = l;

                        System.out.println("Got a Coordinate "
                                + l.getQualifiedCoordinates().getLatitude()
                                + ", "
                                + l.getQualifiedCoordinates().getLongitude());

                        System.out.println("http://" + Constants.website_base
                                + "/apis/location?device_uid=" + Constants.uid
                                + "&lat="
                                + l.getQualifiedCoordinates().getLatitude()
                                + "&lng="
                                + l.getQualifiedCoordinates().getLongitude());

                        if (!_connectionThread.isStarted()) {
                            fetchPage("http://"
                                    + Constants.website_base
                                    + "/apis/location?device_uid="
                                    + Constants.uid
                                    + "&lat="
                                    + l.getQualifiedCoordinates().getLatitude()
                                    + "&lng="
                                    + l.getQualifiedCoordinates()
                                            .getLongitude());
                        } else {
                            createNewFetch("http://"
                                    + Constants.website_base
                                    + "/apis/location?device_uid="
                                    + Constants.uid
                                    + "&lat="
                                    + l.getQualifiedCoordinates().getLatitude()
                                    + "&lng="
                                    + l.getQualifiedCoordinates()
                                            .getLongitude());
                        }

                        Thread.sleep(1000 * 60);

                    } catch (LocationException e) {
                        System.out.println("Location timeout");
                    } catch (InterruptedException e) {
                        System.out.println("InterruptedException"
                                + e.getMessage());
                    } catch (Exception ex) {
                        System.err.println(ex.getMessage());
                        ex.printStackTrace();
                    }
                }
            }
    }

私の接続は次のもので作られています:

ConnectionFactory connFact = new ConnectionFactory();
ConnectionDescriptor connDesc = connFact.getConnection(getUrl());

// Open the connection and extract the data.
try {
   //StreamConnection s = null;
   //s = (StreamConnection) Connector.open(getUrl());
    HttpConnection httpConn = (HttpConnection) connDesc.getConnection();
    /* Data is Read here with a Input Stream */

何か案は ?

0
OS 5.0以上を使用している場合は、ConnectionFactoryを使用するだけで何も追加する必要はありません。
追加された 著者 Mister Smith,
問題が接続していると確信していますか?彼らはタイムアウトしていますか?または、GPSがタイムアウトしている可能性があります(BBで約1分かかります)。
追加された 著者 Mister Smith,
HTTP応答として何を受け取るのですか?エラーコード?例外?
追加された 著者 Mister Smith,
私はConnectionFactoryを使用していますか?私はそれを間違って使っていますか?
追加された 著者 Johann du Toit,
電話機(6.x)でデバッグして、私が呼びたい座標とURLを表示しますが、何も表示しません。エラーもなく、メッセージもなく、サーバーに要求がないことを確認すると...かなり失われています。
追加された 著者 Johann du Toit,
こんにちは、最終的に今週末にデバッグをしています。 Will HTTPレスポンスと実行時にエラーが発生した場合に報告します。
追加された 著者 Johann du Toit,

1 答え

理解した!

私はオンラインで見つけた関数を使って、多数のTry/Catchを使用して接続するときに使用する拡張機能。その後、インターネットAPNの設定をしなければならなかった。私は南アフリカでVodacomを使っているので、APNはパスワードなしの「インターネット」です。

かろうじて髪が残っている....

0
追加された
BlackBerryは、BlackBerryデータプランでプロビジョニングされていますか?もしそうでなければ、それはあなたの困難の原因になるかもしれません。
追加された 著者 Richard,
BlackBerry OSは、さまざまな目的に適したネットワークへの接続方法を多数提供しています。後のOS APIでは、複雑さの多くが抽象化されていますが、その抽象化では、デバイスが適切にプロビジョニングされていることが前提です。ダイレクトTCP接続(APN)を使用することは、必ずしも顧客にとって最も安価なオプションではありません。すべての接続オプションの説明については、このリンクをご覧ください: supportforums.blackberry.com/t5/Java-Development/…
追加された 著者 Richard,
私が知っていることではありません。私はAPNを使用してそれを理解するので、私はデバイスの放送時間を使用しますか?または、ブラックベリーが提供するインターネットを通って行きますか?ユーザーに余計な費用をかけたくないのですが、私はまだこの問題について少し混乱しています。どんな助け?
追加された 著者 Johann du Toit,