2017-02-23 169 views
0

当我尝试使用phonegap模拟器获取我的地理位置时,它是成功的。但是当我在真正的android(使用android studio构建)中安装应用程序时,它无法获得地理位置(我得到了错误代码:2)。 我解决不了这个问题帮我PLZ .......Cordova navigator.geolocation.getCurrentPosition错误(代码:2)

- in simulation circumstance with phonegap

- in installed circumstance

这里是我的代码(的index.html)

<!DOCTYPE html> 
<head> 
    <meta charset="utf-8" /> 
    <title>AppTest</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="jquery.mobile/jquery.mobile.min.css" /> 
    <link rel="stylesheet" href="index.css" /> 
    <script type="text/javascript" src="jquery.mobile/jquery.min.js"></script> 
    <script type="text/javascript" src="jquery.mobile/jquery.mobile.min.js"></script> 
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBlBJFTru5Cp2Ow-HC_w-GiUXbdP_QT3Rk&v=3.exp&sensor=false"></script> 
<!-- <script type="text/javascript" charset="utf-8" src="index.js"></script>--> 
</head> 
<body> 
    <div class="out_area"> 
     <!-- API 실행 버튼 --> 
     <div data-role="button" class="btn1"> 
      API RUN 
     </div> 
     <!-- 결과 표시 영역 --> 
     <div id="cur_position"></div> 
     <div id="map-canvas"></div> 
    </div> 
    <script type=text/javascript> 
var success = function(pos) { 
    // 화면에 위치 정보를 보여줌 
    var text = "<div>Latitude: " + pos.coords.latitude + "<br/>" + "Longitude: " + pos.coords.longitude + "<br/>" + "Accuracy: " + pos.coords.accuracy + "m<br/>" + "</div>"; 
    $("#cur_position").html(text); 

    // 구글 맵 API를 이용한 지도 표시 
    var map; 
    var mapOptions = { 
     zoom : 8, 
     center : new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude) 
    }; 
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
}; 

// 에러 시 실행 
var fail = function(error) { 
    $("#cur_position").html("Error getting geolocation: " + error.code); 
};   
    document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady() { 
    alert('sss'); 
    navigator.geolocation.getCurrentPosition(success, fail, {maximumAge: 300000, timeout:10000, enableHighAccuracy : true}); 
}; 
    </script> 
</body> 
</html> 

配置。 xml:

<?xml version='1.0' encoding='utf-8'?> 
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> 
    <name>HelloCordova</name> 
    <description> 
     A sample Apache Cordova application that responds to the deviceready event. 
    </description> 
    <author email="[email protected]" href="http://cordova.io"> 
     Apache Cordova Team 
    </author> 
    <content src="index.html" /> 
    <access origin="*" /> 
    <allow-intent href="http://*/*" /> 
    <allow-intent href="https://*/*" /> 
    <allow-intent href="tel:*" /> 
    <allow-intent href="sms:*" /> 
    <allow-intent href="mailto:*" /> 
    <allow-intent href="geo:*" /> 
    <allow-intent href="market:*" /> 
    <preference name="loglevel" value="DEBUG" /> 
</widget> 

AndroidManifest.xml:

<?xml version='1.0' encoding='utf-8'?> 
<manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 

    <application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true"> 
     <uses-permission android:name="android.permission.ACCESS_GPS" /> 
     <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" /> 
     <uses-permission android:name="android.permission.ACCESS_LOCATION" /> 
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
     <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize"> 
      <intent-filter android:label="@string/launcher_name"> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="25" /> 
</manifest> 

预先感谢 P.S我不能英语well.So如果您无法读取我含量研究..我该...感谢真的很抱歉!

回答

0

改变传感器真正,然后再试一次

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBlBJFTru5Cp2Ow-HC_w-GiUXbdP_QT3Rk&v=3.exp&sensor=false"></script> 

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBlBJFTru5Cp2Ow-HC_w-GiUXbdP_QT3Rk&v=3.exp&sensor=true"></script> 

希望它可以帮助

如果上面一个不工作,然后尝试下面的代码,

if (navigator.geolocation) { 
    var location_timeout = setTimeout("geolocFail()", 10000); 

    navigator.geolocation.getCurrentPosition(function(position) { 
     clearTimeout(location_timeout); 

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

     // your stuff here 

    }, function(error) { 
     clearTimeout(location_timeout); 
     geolocFail(); 
    }); 
} else { 
    // Fallback for no geolocation 
    geolocFail(); 
}