亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Android Developers Training】 108. 使用模

系統 1902 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/location/location-testing.html


樣例代碼:

LocationProvider.zip


要測試一個使用定位服務的地點認知應用,你不需要將你的設備從一個地方移動到另一個地方來生成數據。你可以將定位服務放到測試模式中。在該模式中你可以發送測試的 Location 對象到定位服務中,然后它會發送給定位客戶端。在測試模式下,定位服務也可以使用測試 Location 對象來激活地理圍欄。

使用測試位置有如下幾個好處:

  • 測試位置允許你創建一個特定的測試數據,而不是通過移動設備獲取一些近似的數據。
  • 由于測試位置來自于定位服務,他們測試你的定位代碼的每一個部分。另外,由于你可以將測試數據和你的應用時分離的,所以在你發布應用的時候,不需要移除你的測試代碼。
  • 由于你不需要通過移動設備來產生測試數據,所以你可以使用模擬器進行測試。

最佳的使用測試位置的方法是從一個另外的測試位置提供應用發出。這節課包含了一個你可以下載并使用的提供器應用,你可以使用它來測試你的應用。你可以根據你的需求恰當地更新提供器應用。相關的內容將會在后續章節中講解。

這節課剩余的部分將會展示如何啟動測試模式,并使用一個定位客戶端將測試位置發送給定位服務。

Note:

測試位置對定位服務在行為認知上所使用的算法是沒有影響的。要了解有關行為認知方面的知識,可以閱讀: Recognizing the User's Current Activity (博客鏈接: http://www.cnblogs.com/jdneo/p/3758479.html


一). 打開測試模式

要在測試模式下將測試位置發送給定位服務,一個測試應用必須請求 ACCESS_MOCK_LOCATION 權限。另外,你必須使用“ Enable mock locations ”選項啟用測試設備上的測試位置。要學習如何在設備上啟用測試位置,可以閱讀: Setting up a Device for Development

要打開定位服務的測試模式,首先將一個定位客戶端連接到定位服務,這在 Retrieving the Current Location (博客鏈接: http://www.cnblogs.com/jdneo/p/3713826.html )中已經講解過。然后調用 LocationClient.setMockMode(true) 。一旦你調用了這個方法,定位服務會關閉它的內部定位提供器,并僅發送你所提供的測試位置。下面的代碼片段展示了如何調用 LocationClient.setMockMode(true)

      
        //
      
      
         Define a LocationClient object
      
      
        public
      
      
         LocationClient mLocationClient;

    ...

    
      
      
        //
      
      
         Connect to Location Services
      
      
            mLocationClient.connect();

    ...

    
      
      
        //
      
      
         When the location client is connected, set mock mode
      
      

    mLocationClinet.setMockMode(
      
        true
      
      );
    

一旦你將定位客戶端連接到了定位服務上,你必須保持連接直到你完成了測試位置的發送。一旦你調用了 LocationClient.disconnect() ,定位服務會重新回到它的內部定位提供器上。如果你要在定位客戶端正在連接的狀態下關閉測試模式,需要調用 LocationClient.setMockMode(false)


二). 發送測試位置

一旦你設置了測試模式,你可以創建測試 Location 對象并將它們發送至定位服務。之后,定位服務會將這些測試 Location 對象發送給已連接的定位客戶端。定位服務也會使用測試 Location 對象來控制地理圍欄的激活。

要創建一個新的測試 Location ,我們使用你的測試數據創建一個新的 Location 對象。把提供器的值設置為“ flp ”,定位服務會把它放到發出的 Location 對象中。下面的代碼片段展示了如何創建一個新的測試 Location

      
        private
      
      
        static
      
      
        final
      
       String PROVIDER = "flp"
      
        ;

    
      
      
        private
      
      
        static
      
      
        final
      
      
        double
      
       LAT = 37.377166
      
        ;

    
      
      
        private
      
      
        static
      
      
        final
      
      
        double
      
       LNG = -122.086966
      
        ;

    
      
      
        private
      
      
        static
      
      
        final
      
      
        float
      
       ACCURACY = 3.0f
      
        ;

    ...

    
      
      
        /*
      
      
        

     * From input arguments, create a single Location with provider set to

     * "flp"

     
      
      
        */
      
      
        public
      
       Location createLocation(
      
        double
      
       lat, 
      
        double
      
       lng, 
      
        float
      
      
         accuracy) {

        
      
      
        //
      
      
         Create a new Location
      
      

        Location newLocation = 
      
        new
      
      
         Location(PROVIDER);

        newLocation.setLatitude(lat);

        newLocation.setLongitude(lng);

        newLocation.setAccuracy(accuracy);

        
      
      
        return
      
      
         newLocation;

    }

    ...

    
      
      
        //
      
      
         Example of creating a new Location from test data
      
      

    Location testLocation = createLocation(LAT, LNG, ACCURACY);
    

在測試模式下,調用 LocationClient.setMockLocation() 將一個測試位置發送給定位服務。例如:

          mLocationClient.setMockLocation(testLocation);
    

定位服務會設置該測試位置作為當前的位置,且該地點會作為下一個更新的地點發出。如果這一新的測試位置穿越了一個地理圍欄,那么定位服務會激活該地理圍欄。


三). 運行測試位置提供器應用

本節會包含一個測試位置提供器應用的簡短概述(可在最上面的連接下載),并對你應該如何使用該應用進行測試進行一些指導。

概述

本課程中涉及的 測試位置提供器應用,會從后臺一個運行了已啟動的 Service 的線程中,將測試位置發送給定位服務。通過使用一個已啟動的服務,提供器應用可以一直保持運行,即使應用的主 Activity 由于配置的變更或者其它系統事件而被銷毀。通過使用后臺線程,可以讓該服務執行一個長期的測試任務而不會阻塞UI線程。

當你打開 提供器應用后,啟動的 Activity 允許你將測試參數發送給 Service ,并控制你希望測試的類型。涉及到下列選項:

測試前暫停

提供器應用將測試數據發送給定位服務前需要等待的時間。這一間隔可以允許你在測試開始前,有時間從提供器應用切換到要測試的應用。

發送間隔

提供器應用將測試數據發送給定位服務時的中間間隔。在后面的章節會進一步說道該選項。

單次執行

即從普通模式切換到測試模式,執行一次測試數據,之后再切換回普通模式,并殺掉 Service

連續執行

即從普通模式切換到測試模式,無限地執行測試數據,之后再切換回普通模式,后臺線程以及已啟動的 Service 會一直執行,甚至主 Activity 已經被銷毀

停止測試

如果一個連續測試正在執行中,該選項會停止它;否則,會返回一個警告消息。啟動的 Service 會從測試模式切換到普通模式,然后將其自身中止。同時后臺線程也會被中止。

除了上述選項之外,提供器應用還具有兩種顯示狀態:

應用狀態

顯示提供器應用相關的生命周期狀態信息。

連接狀態

顯示連接到客戶端的連接狀態信息。

由于已啟動的 Service 正在運行,所以它還會推送測試狀態的通知。這些通知允許你即使應用不在前臺也可以觀察狀態的更新情況。當你點擊了一個通知,提供器應用的主 Activity 會回到前臺。

使用測試位置提供器應用進行測試

要測試來自測試位置提供器應用的測試位置數據:

在一個裝有Google Play服務的設備上安裝測試位置提供器。定位服務是Google Play服務的一部分。

在設備上,啟用測試位置。要學習怎么做,可以查看: Setting up a Device for Development

從啟動器開始提供器應用,然后在主界面上選擇模式。

除非你移除了啟動暫停,不然的話,測試位置提供器應用會暫停一些時間,然后開始將測試數據發送給定位服務。

運行你想要測試的應用。當測試位置提供器應用在運行時,你正在測試的應用匯接收測試位置而不是真實的位置。

如果提供器應用是在處于連續測試的中間,你可以通過點擊“ Stop test ”切換回真實地點。這會強制已啟動的 Service 關閉測試模式并且將其自身停止。當服務停止后,后臺線程也被銷毀了。


四). 有關測試的建議

下面的章節包含了創建測試數據以及使用測試位置提供器應用提供的數據這兩方面的建議。

選擇一個發送間隔

每一個讓定位服務發送位置的測試位置提供器都有它自己的最小更新間隔。例如,GPS提供器無法以每秒更新一次的頻率發送地理位置更新。,而Wi-Fi定位的頻率上限則是5秒一次。對于真實的位置,這些周期是會被自動處理的,但你需要再發送測試位置的時候為它們進行計數。例如,你不應該以超過一秒一次的頻率發送測試位置。如果你在測試室內的位置(更多地依賴于Wi-Fi),那么你使用的頻率應該是五秒一次。

仿真移動速度

要仿真一個實際設備的速度,可以縮短或者延長連續兩個位置之間的距離。例如,可以每秒移動88英尺來模擬汽車的行駛,因為這相當于每小時60英里。相對而言,每秒1.5英尺的變化可以仿真快不行走,這相當于每小時3英里。

計算位置數據

通過搜索網絡,你可以發現找到很多計算起始位置經緯度與結束位置經緯度之間距離的小程序,以及計算兩點經緯度之間距離所用的公式。另外 Location 類提供了兩個方法來計算兩點之間距離。

distanceBetween()

一個靜態方法,根據經緯度來計算兩點之間的距離。

distanceTo()

對一個給定的 Location ,返回到另一個 Location 的距離。

地理圍欄測試

當你對一個由地理圍欄檢測功能的應用進行測試時,使用的測試數據應該能夠反映不同形式的行動方式,如:行走,騎車,駕駛,火車等。對于慢速的行動模式,可以讓兩點間的距離變化較小。對應的,對于快速地行動模式,可以讓兩點間的距離大一些。

管理測試數據

這節課所包含的測試位置提供器應用可以以常量的形式測試經緯度以及精度。你可以考慮其他測試數據的組織形式:

XML:

可以將位置數據存儲于測試位置提供器應用中對應的XML文件中,這樣可以將測試數據與代碼分離,方便測試。

從服務器下載:

將位置數據存儲于服務器中,并讓提供器應用下載。由于數據和應用完全分離,所以你可以修改測試數據而不用重新構建應用。你也可以通過修改服務器上的測試數據,并讓結果立即反應到你正在測試的測試位置中。

記錄的數據

除了設想一些測試數據外,你還可以寫一個工具應用,它記錄你移動設備過程中的位置數據。并將這些數據作為測試數據,或利用這些數據幫助你構造一些測試數據。例如,你可以在行走的過程中記錄一些數據,然后創建一些測試數據,這些數據會隨著時間的變化而發生相應的變化。

【Android Developers Training】 108. 使用模擬定位進行測試


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99热在线只有精品 | 国产一级二级在线观看 | 国产视频一区二区 | 久久综合久久综合久久综合 | 国产一区二区三区免费在线观看 | 国产成人一区二区三区视频免费 | 欧美肥老妇做爰视频 | 欧美成人四级剧情在线播放 | 女人精69xxxxx免费无毒 | 免费毛片观看 | 99热国产这里只有精品9九 | 国产午夜精品久久久久免费视 | 日日夜夜网站 | 婷婷色在线观看 | 四虎永久在线精品视频免费观看 | 成 人国产在线观看高清不卡 | 一级毛片一级毛片免费毛片 | 欧美一区二区精品 | 国产精品麻豆视频 | 欧美激情欧美狂野欧美精品免费 | 久久成人免费大片 | 免费看国产精品久久久久 | 97精品久久天干天天蜜 | 中文字幕日韩欧美 | 大学生久久香蕉国产线看观看 | 国产精品久久久久久久久 | 2021福利视频 | 免费观看一级特黄三大片视频 | 国产影片中文字幕 | 精品老司机在线观看视频 | 国产好大好爽久久久久久久 | 欧美精品h在线播放 | 91天堂97年嫩模在线观看 | 第一福利在线观看 | 香蕉伊人久久 | 色姑娘桃花网 | 免费99热在线观看 | 国产成人精品福利色多多 | 在线观看人成午夜影片 | 久久精品一 | 精品推荐 国产 |