1

こんにちは基本的に私は150秒ごとに現在の位置を取得する必要があるアプリを持っています、私はアンドロイド2.3で中国のタブレットを使用しています、そしてそれはgpsを持っていません、私はセルネットワークだけを使用しています。現在の位置を取得するために、deviceready関数内でこのコードを使用しています。

 setInterval(
        function(){
            if (navigator.network.connection.type != Connection.NONE && navigator.geolocation) {
                watchID = navigator.geolocation.getCurrentPosition(
                    function(position){
                        plat = position.coords.latitude;
                        plon = position.coords.longitude;
                        console.log('location success');

                        if(map != null){
                            map.setView({center: new Microsoft.Maps.Location(plat,plon) });
                            pintaxi.setLocation(new Microsoft.Maps.Location(plat,plon));
                        }
                        count++;
                        if(count == 4){
                            count = 0;
                            console.log('Send data');
                            $.post("http://m2media.mx/plataforma/setpos.php", {latitud: plat, longitud: plon, referencia: 'DEV-008'});
                        }
                   }, 
                   displayError,
                    { timeout: 30000 });
            }
            else{
                if(watchID != null) navigator.geolocation.clearWatch(watchID);
                console.log('No connection, fail');
            }
        }, 60000
    );

これが大事なことです。このアプリのアクティビティは起動時に実行されるので、bootupreceiverは次のようになります。

public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, SmarttaxiActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
}

問題は、getCurrentの位置が常にタイムアウト例外をスローすることです。最初はアプリの起動時に3gが有効になるまでに約10〜20秒の間隔がありますが、3gが有効になった後でも、アプリ内でタイムアウト例外がスローされます。ツイッターウィジェットのようなインターネット接続を使用する他の機能があり、それらは問題なく実行されます。

問題は、ロケーション機能を起動した後にアプリを手動で実行すると、かなりうまく機能するということです。logcatに異常は見られません。これを3日間修正しようとしましたが、まだ運がありません。誰かが問題の原因や、使用しているロジックが間違っているかどうかについてのアイデアを持っていることを願っています。

お時間をいただきありがとうございます。

4

1 に答える 1

0

navigator.geolocation.watchPositionnavigator.geolocation.clearWatchを試しましたか?

navigator.geolocation.watchPosition(success_callback_function, error_callback_function, position_options)

navigator.geolocation.clearWatch(watch_position_id)

ここに例があります

var wpid = navigator.geolocation.watchPosition(geo_success, geo_error, {enableHighAccuracy:true, maximumAge:30000, timeout:27000});

function geo_success (position) {

        var lat = position.coords.latitude;
        var lng = position.coords.longitude;

        //--- your code -- 
}

function geo_error(err) {
         console.log(err);
}

明確なwatchPositionのために...

navigator.geolocation.clearWatch(wpid);
于 2012-09-06T11:50:13.097 に答える