Android應用開發之使用PhoneGap實現位置上報功能

    看這裏:Android應用開發之使用PhoneGap實現位置上報功能
javascript

    上一篇,使用Intellij Idea 搭建PhoneGap Android開發環境中,簡單的介紹了PhoneGap Android開發環境的搭建,而且開發了Hello World的應用,本篇,咱們繼續學習使用PhoneGap進行開發,獲取用戶設備的位置信息,經過獲取經緯度實現位置上報的功能,接下來,開始本篇的學習。php

    咱們在上篇module的基礎上進行開發,主要是修改index.html中的內容,爲了操做DOM方便,咱們引入jquery.min.js,爲了經過 設備的經緯度獲取詳細的位置信息,咱們使用了BaiduMap提供的API,須要註冊百度開發者帳號,而且建立應用,獲取相應的key,這裏不在贅述,詳 細看這裏css

        初始的index.html以下所示:html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
    <style type="text/css">
        body, html, #map {
            width: 100%;
            height: 100%;
            overflow: hidden;
            margin: 0;
        }
    </style>
    <script type="text/javascript"
            src="http://api.map.baidu.com/api?type=quick&ak=v39tYjUNeLluTojzZGqmNHpQ&v=1.0"></script>
    <script type="text/javascript" charset="utf-8" src="../js/cordova.js"></script>
    <script type="text/javascript" charset="utf-8" src="../js/jquery-1.7.1.min.js"></script>
    <title>Hello PhoneGap</title>
    <script type="text/javascript">
 
    </script>
</head>
<body>
    <h1>Hello PhoneGap</h1>
    <!-- 這裏用來顯示經緯度及位置信息 -->
    <p id="geoLocation"></p>
    <!--這裏用來顯示地圖-->
    <div id="map"></div>
</body>
</html>

        接下來,咱們須要經過phonegap提供的api,編寫js代碼獲取相應的設備經緯度信息,詳細的官方api見這裏。首先咱們在應用啓動的時候增長一個Listener,調用navigator.geolocation.getCurrentPosition方法獲取當前設備的經緯度信息,getCurrentPosition方法接收兩個Callback函數,分別對應定位成功或失敗的狀況,代碼以下:java

<script type="text/javascript">
    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        navigator.geolocation.getCurrentPosition(locateSuccess, locateError);
    }
    function locateSuccess(position) {
        navigator.notification.alert("定位成功!", null, "提醒");
    }
    function locateError(error) {
        navigator.notification.alert("定位失敗:" + error.message, null, "警告");
    }
</script>

    咱們發如今locateSuccess函數中,有一個position參數,這個是定位成功後phonegap封裝的包含位置信息的一個參數,經過 position.coords,咱們能夠拿到成功後的經緯度,海拔等一組地理座標信息,這裏只是簡單的獲取一下經緯度信息,並將其顯示在屏幕上,代碼如 下:jquery

var locate = $("#geoLocation");
var html = "經度:" + position.coords.longitude + "<br/>緯度:" + position.coords.latitude;
locate.html(html);

    接下來是,經過經緯度信息獲取當前位置的功能,經過baidumap提供的API,咱們使用了javascript Api極速版來顯示地圖等信息,詳細見這裏。代碼以下:git

            var map = new BMap.Map("map"); //在相應的DOM處展示地圖
            var point = new BMap.Point(position.coords.longitude, position.coords.latitude);
            map.centerAndZoom(point, 14); //以當前經緯度信息爲地圖中心點
            map.addOverlay(new BMap.Marker(point));//地圖上添加標註
//            map.enableScrollWheelZoom();
            var gc = new BMap.Geocoder();
            //根據當前地圖中心點,獲取詳細的位置信息:省市區街道牌號等
            gc.getLocation(point, function (rs) {
                var addComp = rs.addressComponents;
                var address = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;
                //將詳細的位置信息追加到指定的DOM中
                locate.html(locate.html() + "<br/>地址:" + address);
            });

    經過上面的開發,咱們已經獲取了設備的經緯度及位置信息,可是並無對位置信息進行保存,在正式的開發應用中,咱們常常須要對這些信息進行保存持久化等操 做,接下來,咱們來看一下經過phonegap進行位置的上報,很簡單,經過ajax提交請求,獲取響應便可,代碼以下:web

//自動位置上報
var url = "http://192.168.0.32:8888/app/location.jfinal";
var data = {
    latitude: position.coords.latitude,//緯度
    longitude: position.coords.longitude,//經度
    uuid: device.uuid// 設備惟一標識
};
$.post(url, data, function () {
    navigator.notification.alert("自動位置上報成功!", null, "提醒");
});

    至此,咱們的應用已經基本開發完整,在服務端代碼的編寫中,咱們只須要經過request獲取相應的參數信息,並加以持久化便可,在一些移動定位類的應用中,處理邏輯也大都如此,最後,咱們來看一下完整的效果。以下圖:ajax

 

    完整代碼地址:http://git.oschina.net/realfighter/Hello-PhoneGap/blob/master/assets/www/html/geolocation.htmlapi

相關文章
相關標籤/搜索