20

geo fixエミュレーター ( telnetを使用している場合でも) とデバイスの両方で、Geolocation を Android で動作させるのに問題があります。iOS、WP8、およびブラウザーで動作します。

次のコードを使用してデバイスに場所を尋ねると、常にエラーが発生します (私の場合は、エラー コードとエラー メッセージの両方を使用してカスタマイズRetrieving your position failed for unknown reason.しています)。null

関連コード:

    successHandler = (position) ->
      resolve App.Location.create
        lat: position.coords.latitude
        lng: position.coords.longitude

    errorHandler = (error) ->
      error = switch error.code
        when 1
          App.LocationError.create
            message: 'You haven\'t shared your location.'
        when 2
          App.LocationError.create
            message: 'Couldn\'t detect your current location.'
        when 3
          App.LocationError.create
            message: 'Retrieving your position timeouted.'
        else
          App.LocationError.create
            message: 'Retrieving your position failed for unknown reason. Error code: ' + error.code + '. Error message: ' + error.message

      reject(error)

    options =
      maximumAge: Infinity # I also tried with 0
      timeout: 60000
      enableHighAccuracy: true
    navigator.geolocation.getCurrentPosition(successHandler, errorHandler, options)

プラットフォーム/アンドロイド/AndroidManifest.xml

<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" />

www/config.xml (念のため)

<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.GeoBroker" />
</feature>

コルドバ 3.1.0 を使用します。Android 4.2 でのテスト。プラグインがインストールされました。index.html に含まれる Cordova.js (InAppBrowser などの他のプラグインは正常に動作しています)。

$ cordova plugins ls
[ 'org.apache.cordova.console',
'org.apache.cordova.device',
'org.apache.cordova.dialogs',
'org.apache.cordova.geolocation',
'org.apache.cordova.inappbrowser',
'org.apache.cordova.vibration' ]

私は無知です。何か不足していますか?

4

14 に答える 14

6

これを試して、

位置情報プラグインを削除する

cordova plugin rm org.apache.cordova.geolocation

ただし、AndroidManifest.xml と config.xml のプロパティはそのままにしておく必要があります。

(in app/res/xml/config.xml)
<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.GeoBroker" />
</feature>


(in app/AndroidManifest.xml)
<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" />

iOS の場合は config.xml

<feature name="Geolocation">
    <param name="ios-package" value="CDVLocation" />
</feature>

次に、CLI を使用してアプリケーションをビルドし、デバイス/エミュレーターでアプリケーションを実行します。エラー コードと getlocation のメッセージ onError が表示されることがわかります。

詳細情報:上記の手順を実行した後でも、設定後も一貫してタイムアウト メッセージが表示される場合があります{timeout:10000}。これに対する解決策は非常に面白いです。デバイスの電源をオフにしてからオンにして、アプリケーションを再度実行するだけです。私と同じように、あなたはそれが機能するのを見て驚くべきです!

于 2014-03-13T10:24:29.507 に答える
2
  • config.xml ファイルを確認してください。

この行を削除

<preference name="permissions" value="none"/>
  • AndroidManifest.xml を調べます

すべての<uses-permission...>行とその行がタグ<uses-sdk...>の前にあることを確認してください。<application...>

その後、電話でアプリケーションを手動でアンインストールし、再度インストールします。

それが役立つことを願っています。

lg

速い

于 2013-11-06T21:34:02.947 に答える
2

多くの検索の後、最終的にユーザーの場所を取得できる方法を見つけました実際の問題は、メソッドを呼び出すときに
navigator.geolocation.getCurrentPosition(successHandler, errorHandler, options)

デバイスの位置情報サービスがオンになっていない場合、位置情報へのアクセス許可があったとしても、位置情報はまったく機能しません。必要なのは位置情報サービスをオンにすることです これを実現するにはいくつかの方法があります

最初のものは
1.関数cordova.plugins.diagnostic.switchToLocationSettings()を呼び出す前に手動で場所を使用して有効にする これを実現する には、OS またはフレームワークに基づいて、次のいずれかの方法を使用してcordova.plugins.diagnosticgetCurrentPosition()というプラグインをインストールします。

$ cordova plugin add cordova.plugins.diagnostic
$ cordova plugin add cordova.plugins.diagnostic --variable ANDROID_SUPPORT_VERSION=27.+
$ phonegap plugin add cordova.plugins.diagnostic
$ ionic cordova plugin add cordova.plugins.diagnostic
  1. 2 番目の方法は、cordova-plugin-request-location-accuracy
    というプラグインを使用する ことです インストールして
    $ cordova plugin add cordova-plugin-request-location-accuracy
    、次のコードを使用します

 cordova.plugins.locationAccuracy.canRequest(function(canRequest){
        if(canRequest){
            cordova.plugins.locationAccuracy.request(function(){
                console.log("Successfully made request to invoke native Location Services dialog");
                
              navigator.geolocation.getCurrentPosition(onSuccess, errorHandler, options)
 var onSuccess = function(position) {
        alert('Latitude: '          + position.coords.latitude          + '\n' +
              'Longitude: '         + position.coords.longitude         + '\n' +
              'Altitude: '          + position.coords.altitude          + '\n' +
              'Accuracy: '          + position.coords.accuracy          + '\n' +
              'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
              'Heading: '           + position.coords.heading           + '\n' +
              'Speed: '             + position.coords.speed             + '\n' +
              'Timestamp: '         + position.timestamp                + '\n');
    };

    // onError Callback receives a PositionError object
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n');
    }
            }, function(){
                console.error("Failed to invoke native Location Services dialog");
            });
        }else{
            // request location permission and try again
        }
    });

于 2019-12-20T06:08:28.180 に答える
1

プラグインを手動で追加していると思います。次のコマンドを使用します:(CLI ビルドを使用している場合は厳密に)

phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git
于 2013-11-06T12:30:25.607 に答える