ワークライトでマルチページ アプリを開発しています。
このアプリでは、サンプル アプリ (これも Worklight が提供) に基づいて、Worklight が提供する位置情報サービスを実装しようとしています。
緯度と経度を取得できます。緯度と経度を使用して、Google マップで位置を特定し、地図を表示しようとしています。また、緯度と経度に基づいてマーカーを追加したいと考えています。
以下は私のHTMLページです:
<div class="longitude">Longitude:
<input type="text" id="long"/>
</div>
<div class="latitude">Latitude:
<input type="text" id="lat"/>
</div>
<div id="googleMap" style="width:500px;height:380px;"></div>
<script type="text/javascript" src="//maps.googleapis.com/maps/api/js key=AIzaSyBGTVsuc8dBv8o0sgBV9A8huVo36LPFMA8&sensor=false"> </script>
対応する .js ファイル:
currentPage={};
currentPage.init = function() {
WL.Logger.debug("LocationServices : : init");
};
function loadLatLong() {
// start up acquisition process
getFirstPositionAndTrack();
// keep running while in background on Android; will show a notification
WL.App.setKeepAliveInBackground(true);
};
function getFirstPositionAndTrack() {
window.alert('Click OK to proceed to acquire starting position');
// we want to have an up to date, rough idea where the user is:
var geoPolicy = WL.Device.Geo.Profiles.RoughTracking();
// RoughTracking policy can re-use old positions (so it may only update once a minute)
// change our policy to once a second:
geoPolicy.maximumAge = 1000;
// note: to see at high-accuracy, change RoughTracking above to LiveTracking
// get the user's current position
WL.Device.Geo.acquirePosition(
function(pos) {
// when we receive the position, we display it and starton-going acquisition
displayPosition(pos);
triggers = {
Geo: {
posChange: { // display all movement
type: "PositionChange",
callback: function(deviceContext) {
displayPosition(deviceContext.Geo);
}
},
leftArea: { // alert when we have left the area
type: "Exit",
circle: {
longitude: pos.coords.longitude,
latitude: pos.coords.latitude,
radius: 200
},
callback: function() {
window.alert('Left the area');
}
},
dwellArea: { // alert when we have stayed in the vicinity for 3 seconds
type: "DwellInside",
circle: {
longitude: pos.coords.longitude,
latitude: pos.coords.latitude,
radius: 50
},
dwellingTime: 3000,
callback: function() {
window.alert('Still in the vicinity');
}
}
}
};
WL.Device.startAcquisition({ Geo: geoPolicy }, triggers, { Geo: alertOnGeoAcquisitionErr } );
},
function(geoErr) {
alert("geoErr");
alertOnGeoAcquisitionErr(geoErr);
// try again:
getFirstPositionAndTrack();
},
geoPolicy
);
}
// display the position to the user
function displayPosition(pos) {
/*alert(pos.coords.longitude);
alert(pos.coords.latitude);*/
$('#long').val(pos.coords.longitude);
$('#lat').val(pos.coords.latitude);
var mapProp = {
center:new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude),
zoom:5,
mapTypeId:google.maps.MapTypeId.ROADMAP
};
var map=new google.maps.Map(document.getElementById("googleMap"),mapProp);
function alertOnGeoAcquisitionErr(geoErr) {
window.alert('Error acquiring geo (' + geoErr.code + '): ' + geoErr.message);
}
}
次の権限も追加しましたAndroidManifest.xml
。
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyAuYLZwW-9mFrw4mHkf-CLXOWglZBwhbhk"/>
<permission
android:name="com.DemoPoC.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="com.DemoPoC.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
誰かが私が間違っていることを教えてもらえますか?