1. 程式人生 > >Android location物件為空

Android location物件為空

思路原理:

(1)獲取LocationManager例項,通過getSystemService方法,傳入Context.LOCATION_SERVICE引數。

(2)獲取可用的位置提供器,有GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_PROVIDER三種,前兩種比較常用。

(3)將(2)獲取到的位置提供器傳入LocationManager的方法getLastKnownLocation,即可獲取Location資訊。

 如果移動裝置地理位置不斷髮生變化,則實時更新需要進行如下步驟:

(4)呼叫LocationManager的requestLocationUpdates方法,第一個引數是位置提供器,第二個引數是監聽位置變化的時間間隔(毫秒),第三個引數是監聽位置變化的距離間隔(米),第四個引數是LocationListener監聽器

(5)當位置發生變化後,就會呼叫監聽器的onLocationChanged方法。

(6)為了省電,節約資源,當程式關閉後,呼叫LocationManager的removeUpdates方法移除監聽器。

獲取許可權

修改AndroidManifest.xml,新增如下程式碼:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

程式碼片段

package com.example.locationtest;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    LocationManager locationManager;
    TextView textView;
    Location location;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textView);
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        // 獲取location物件
        location = getBestLocation(locationManager);

        updateView(location);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                3000, 8, new LocationListener() {

                    @Override
                    public void onStatusChanged(String provider, int status,
                            Bundle extras) {
                    }

                    @Override
                    public void onProviderEnabled(String provider) {
                        updateView(locationManager
                                .getLastKnownLocation(provider));
                    }

                    @Override
                    public void onProviderDisabled(String provider) {
                        updateView(null);
                    }

                    @Override
                    public void onLocationChanged(Location location) {
                        location = getBestLocation(locationManager);// 每次都去獲取GPS_PROVIDER優先的location物件
                        updateView(location);
                    }
                });
    }

    private void updateView(Location location) {
        if (location != null) {
            StringBuffer sb = new StringBuffer();
            sb.append("位置資訊:\n");
            sb.append("經度:" + location.getLongitude() + ", 緯度:"
                    + location.getLatitude());
            textView.setText(sb.toString());
        } else {
            textView.setText("");
        }
    }

    /**
     * 獲取location物件,優先以GPS_PROVIDER獲取location物件,當以GPS_PROVIDER獲取到的locaiton為null時
     * ,則以NETWORK_PROVIDER獲取location物件,這樣可保證在室內開啟網路連線的狀態下獲取到的location物件不為空
     * 
     * @param locationManager
     * @return
     */
    private Location getBestLocation(LocationManager locationManager) {
        Location result = null;
        if (locationManager != null) {
            result = locationManager
                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if (result != null) {
                return result;
            } else {
                result = locationManager
                        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                return result;
            }
        }
        return result;
    }

}


相關推薦

Android location物件

思路原理: (1)獲取LocationManager例項,通過getSystemService方法,傳入Context.LOCATION_SERVICE引數。 (2)獲取可用的位置提供器,有GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_P

android防止資料被釋放獲取物件的幾點措施

1.將大多數的context使用你的application替代 public class MyApplication extends Application{ private static MyApplication app; @Overr

LOCaTION獲取什麽

5% music .com 獲取 com ati list aid 什麽 MENU%E7%9A%84%E5%AE%9E%E4%BE%8B%EF%BC%88%E5%A4%9A%E7%BA%A7%E8%8F%9C%E5%8D%95%EF%BC%89 http://music.

javascript中怎麼判斷物件{}

時候通過AJAX方法呼叫返回的是一個JSON物件,而這個物件可能在開發過程中會沒有資料是一個空{}。 JavaScript判斷object/json 是否為空,可以使用jQuery的isEmptyObject()方法。 function isEmptyObject(obj) {

c標籤判斷集合是否,js物件如何判斷,el表示式判斷物件集合

JSP頁面開頭要包含 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functio

mybatis查詢資料庫返回結果物件

當實體類屬性與表中列名不一樣時,需要定義resultMap,否則查詢物件為空 resultMap id="person" type="Person"> <result pr

JavaScript 判斷物件的方法

文章目錄 1 背景 2 方法 2.1 Jquery 的isEmptyObject 2.2 node 2.3 判斷物件屬性個數 1 背景 經常在express 框架中處理body引數等等操作,而有時經

iOS-物件的判斷(nil、null)

在開發中,會遇到很多空的情況,有時候取得物件(null),還有時候會得到<null>的情況,我們需要判斷是否為空,進行return id result; // 針對(null)這種情況 i

springboot+mybatis+springmvc實現資料庫增加資料,除錯時service實現類中mapper物件

問題:service實現類裡面執行到Mapper.save(Entity)時,捕捉到空指標異常 通過除錯,發現Mapper為空 解決途徑: 在瀏覽多個回答後,在論壇裡面看到有人回答說,controller層的方法中new 了*ServiceImpl()導致,如下圖 解決方法:註釋掉該條

Freemaker中判斷物件 ??與!的區別

UserEntity: public class UserEntity{ /** * 使用者ID */ private String userId; /** * 賬號 */ private String account;

HandlerInterceptor裡@Autowired物件的解決方法

That's because Spring isn't managing your PagePopulationInterceptor instance. You are creating it yourself in the below (攔截器內使用@Autowired時出現了null,這是由於你的spr

mybatis collection 一對多對映返回的物件的處理

    我這裡是一個任務對應多個用例,是一對多的關係,直接上程式碼: package com.gameloft9.demo.dataaccess.model.task; import java.util.ArrayList; import java.util.Date;

JS判斷頁面物件的幾種寫法

第一種: function isEmptyObject(e) { var t; for (t in e) return !1; return !0 } 第二種: function isEmptyObject(e) {   

js判斷陣列、物件或者不存在

if(typeof(arr)=='undefined'?false:(arr.length==0?false:true)){ console.log('陣列不為空') } else { console.log('陣列不存在或者為空') } if(typeof

物件時get取值造成的錯誤

System.out.println("查詢到的學號和密碼:"+student.getStudent_id()+"和"+student.getPassword());當student物件為空時取值會造成錯誤

Uniyt熱更新——LuaFrameWork學習(三)判斷unity裡物件

在遊戲製作過程中我們經常會Destroy一些沒用的GameObject,那麼在ulua裡我們怎麼樣來判斷我們的引用被Destroy了呢,這裡要感謝阿盟哥,他已經為我們解決了這個問題,在他寫的Globa

@RequestBody物件,異常Required request body is missing的解決辦法

 由於與前端互動的過程當中,都是用json資料與前端進行互動,這樣想取出整個傳送過來的json資料的時候,就需要用到@RequestBody這個註解,前端傳送資料的格式如下://測試傳送json資料 $

WebApi Post引數物件,伺服器端引數物件的問題

最近在研究WebApi,在實際的工作中遇到了一個問題:在將引數物件MSG2的例項通過Post至伺服器端的時候, public static string SetMessageOperationResult(MSG2 model) {

DTO的理解以及spring遇到的一個問題註解方式物件

之前不明白有些框架中為什麼要專門定義DTO來繫結表現層中的資料,為什麼不能直接用實體模型呢,有了DTO同時還要維護DTO與Model之間的對映關係,多麻煩。 然後看了這篇文章中的討論部分才恍然大悟。 摘兩個比較有意義的段落。 表現層與應用層之間是通過資料傳輸物件(DTO)進

json傳入後臺物件

前端程式碼: var cmopSmsExt={list:[]}; function onAfterEdit(rowIndex, rowData,changes){ if(changeBefore!