2013-11-27 13 views
5

3エラー、アンドロイドジオロケーション使っPhoneGapのコード:私はジオロケーションのPhoneGap APIのドキュメントを使用しますが、エラーメッセージの下に取得を使用しようとしている

アラート コード:3 メッセージ:タイムアウトが

私のコードは有効期限が切れ、

<script> 

// Wait for Cordova to load 
// 
document.addEventListener("deviceready", onDeviceReady, false); 

var watchID = null; 

// Cordova is ready 
// 
function onDeviceReady() { 
    // Throw an error if no update is received every 30 seconds 
    var options = { timeout: 10000 }; 
    watchID = navigator.geolocation.watchPosition(onSuccess, onError, options); 
} 

// onSuccess Geolocation 
// 
function onSuccess(position) { 
    var element = document.getElementById('geolocation'); 
    element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br />' + 
        'Longitude: ' + position.coords.longitude + '<br />' + 
        '<hr />' + element.innerHTML; 
} 

// onError Callback receives a PositionError object 
// 
function onError(error) { 
    alert('code: ' + error.code + '\n' + 
     'message: ' + error.message + '\n'); 
} 

私が行方不明です何を私にアドバイスをしてください。

答えて

0

Phonegapは、Phonegapライブラリのない通常のWebアプリケーションでも使用できるジオロケーションAPIと同じインターフェイスを使用します。 the specsから

:実装が正常新しい位置のオブジェクトを取得することができる前に

TIMEOUT(数値3)
タイムアウトプロパティで指定された時間の長さが経過しました。

したがって、より高いタイムアウト値をパラメータとして指定できます。あなたの唯一のプロバイダがGPSの場合、10秒は非常に短い時間です。この場合、修正を受けるには屋外でも40〜60秒かかることがあります。

+0

私は30000にタイムアウトを延長しましたが、まだ運がありません – user2331670

+0

GPS対応携帯電話でテストしていますか? 90秒間お試しください。 –

+0

屋外に出てタイムアウトを100000に設定しても動作しない場合、タイムアウトメッセージが表示され続けます。どんな助け? –

4

これは特にAndroid搭載デバイスでは比較的一般的な問題だと思います。私が遭遇した一般的なソリューションの一部は

  1. が含まエラーコールバックを指定しないでください:GPSが有効化されていない場合は、この作品いくつかの本当に奇妙な理由で、あなたの唯一の問題が発生します。私は生産アプリでこれを助言しないだろう。

  2. オプションでenableHighAccuracy:trueを指定します。これはうまくいくようですが、#3以下を参照してください。

  3. オプションでmaximumAgeを指定してください:私はこの1つを使用し、1時間に非常に高い値に設定します。それがしているのは、現在GPSがない場合でも、コードバは最後の1時間以内に取得された最後の既知の座標を与えるため、これは実際にあなたの座標を時間に対してどのくらい正確にしたいかによって決まります。

私は通常#2と#3の組み合わせを使用していますが、これはPhonegap 3.xでは合理的です。

エラーコールバックのプラグインを使用してインテントを起動するオプションを含めると、無効にした場合にGPSを有効にすることができます(電話でGoogleマップを使用するときと同じようにナビゲーション用)。

こちらがお役に立てば幸いです。

4

あなたはAndroidのエミュレータでこの問題を得ていると仮定:

  1. がタイムアウトを追加し、設定enableHighAccuracy:あなたはfalseにenableHighAccuracyを設定する必要がある特定のエミュレータで

    navigator.geolocation.getCurrentPosition(onSuccess, onError, {timeout: 10000, enableHighAccuracy: true}); 
    

    、そのことをしてみてくださいまだ動作しない場合。

  2. Androidでは、エミュレータはGPS値を読み取らないため、コマンドライン経由で送信する必要があります。私たちは(あなたが5554私の場合には、最初に、エミュレータウィンドウのタイトルに番号をポートを確認することができます)エミュレータが実行されているポートにtelnetセッションを開始する必要があります。

    telnet localhost 5554 
    

そして、あなたはジオロケーションを再送信する必要があるアプリを閉じた場合は、コマンドに

geo fix -122.4 37.78 

を実行し、それが動作しない場合は、ただ単にタイムアウトイベントが発生する前に、アプリを開いた後geo fixコマンドを実行します。

あなたは本当のAndroidデバイスを使用している場合(それは私の場合だった)このmalfuntionため

+0

は、 'geo fix'コマンドを助けました – sura2k

+0

プラグインについて私に思い出させるためのthxです.- ' –

+0

iOSシミュレータの高精度が問題を解決しました!ありがとう – cbyte

0

もう一つの理由は、それがGPS有効になっていることを確認し、そしてあなたがジオロケーションプラグインをインストールしていること(phonegap local plugin add org.apache.cordova.geolocationを実行する)は、インストールすることですapkを手動で実行し、関連する権限をアプリに与えないでください。たとえば、次のように

ネットワーク通信:Wi-Fi状態の表示Bluetooth接続を作成し、 完全なインターネットアクセス、ビューのネットワーク状態

お住まいの地域:アクセス位置情報提供者の追加コマンド、微(GPS) 場所、テスト、粗い(ネットワークベース) 位置についてモック位置源

enter image description here

+でabout about permissions:http://developer.android.com/guide/topics/security/permissions.html

2

maximumAgeとtimeoutを指定しないで、最新のAndroid(物理デバイス)を実行しているHTC M8でこの問題を解決しました。

navigator.geolocation.getCurrentPosition(onSuccess, onError, { 
    // maximumAge: 100, 
    // timeout: 2000, 
    enableHighAccuracy: true 
}); 

iPhone 5では正常に動作しましたが、Androidではエラーが返されました。今は問題なく動作します。私は1時間最大と高タイムアウトを試したことに気づくでしょう、そして、それはうまくいきませんでした。これはすべてのシナリオで機能する唯一のソリューションです。

0

私はngCordovaとコルドバ・プラグイン・ジオロケーションを試してみたが、それは常に、それはタイムアウトを設定し、私も、5分でデバイスの位置を取得することはできません意味、私にタイムアウトエラーを返し、そう少なくともアンドロイド5.1のための最終的な解決策: 私はそれがACCESS_WIFI_STATE許可なしに働いていなかったAndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.NETWORK_ACCESS" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 

に権限を追加しました。

これはWi-Fiが接続され、位置が有効になっているSIMカードがなくても機能します。

誰かが役に立ちそうな場合に備えてください。

+0

私はIonic 3でcordio geolocationプラグインをIonicネイティブで使用しています。動作しません。タイムアウト値を使用すると、タイムアウトエラーが発生します。 Wihtoutタイムアウト値私は決して応答を持っていません。 AndroidタブレットでGPSが有効になっていると、ステータスバーのGPSアイコンが表示されます。私はcoordsとの応答がない – Francesco

関連する問題