Android中GPS定位的用法執行個體_Android

來源:互聯網
上載者:User

GPS定位是目前很多手機都有的功能,且非常實用。本文以執行個體形式講述了Android中GPS定位的用法。分享給大家供大家參考之用。具體方法如下:

一般在Android中通過GPS獲得當前位置,首先要獲得一個LocationManager執行個體,通過該執行個體的getLastKnownLocation()方法獲得第一個的位置,該方法的說明如下:

void android.location.LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

provider即定位方式,可以採用GPS定位(LocationManager.GPS_PROVIDER)或者網路定位(LocationManager.NETWORK_PROVIDER),本文是GPS定位,因此使用LocationManager.GPS_PROVIDER。minTime是位置更新的間隔時間。listener是位置改變的監聽器,自己定義一個LocationListener(),重寫onLocationChanged(),加入位置改變時的動作。

布局檔案如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  tools:context=".MainActivity" >   <TextView    android:id="@+id/txt_time"    style="@style/my_text"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="時間:" />   <TextView    android:id="@+id/txt_lat"    style="@style/my_text"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="經度:" />   <TextView    android:id="@+id/txt_lng"    style="@style/my_text"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="緯度:" /> </LinearLayout>

MainActivity.java檔案如下:

package com.hzhi.my_gps;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.content.Context;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {     TextView txt_time;  TextView txt_lat;  TextView txt_lng;  LocationManager lom;  Location loc;  Double lat;  Double lng;  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  Date now;  String str_date;  Timer timer;   @Override  protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);         get_con();    get_gps();         timer = new Timer(true);    timer.schedule(task, 0, 1000);  }   @Override  public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.main, menu);    return true;  }     public void get_gps(){         lom = (LocationManager) getSystemService(Context.LOCATION_SERVICE);    loc = lom.getLastKnownLocation(LocationManager.GPS_PROVIDER);         if (loc != null) {      lat = loc.getLatitude();      lng = loc.getLongitude();      txt_lat.setText("緯度:" + String.valueOf(lat));      txt_lng.setText("經度:" + String.valueOf(lng));    }    else{      txt_lat.setText("緯度:未知" );      txt_lng.setText("經度:未知" );    }         Criteria criteria = new Criteria();    criteria.setAccuracy(Criteria.ACCURACY_FINE);    criteria.setAltitudeRequired(false);    criteria.setBearingRequired(false);    criteria.setCostAllowed(true);    criteria.setPowerRequirement(Criteria.POWER_LOW);    String provider = lom.getBestProvider(criteria, true);         lom.requestLocationUpdates(provider, 1000, 10, los);  }     LocationListener los = new LocationListener(){    public void onLocationChanged(Location location){      if (location != null) {        lat = location.getLatitude();        lng = location.getLongitude();        txt_lat.setText("緯度:" + String.valueOf(lat));        txt_lng.setText("經度:" + String.valueOf(lng));      }      else{        txt_lat.setText("緯度:未知" );        txt_lng.setText("經度:未知" );      }    };         public void onProviderDisabled(String provider){         };         public void onProviderEnabled(String provider){ };         public void onStatusChanged(String provider, int status,    Bundle extras){ };  };     // 擷取控制項  public void get_con(){         txt_time = (TextView) findViewById(R.id.txt_time);    txt_lat = (TextView) findViewById(R.id.txt_lat);    txt_lng = (TextView) findViewById(R.id.txt_lng);  }     Handler handler = new Handler(){         public void handleMessage(Message msg){      switch (msg.what){      case 1:        get_time();        break;      }    }  };     TimerTask task = new TimerTask(){      public void run() {        Message message = new Message();          message.what = 1;          handler.sendMessage(message);      }   };     // 擷取時間  public void get_time(){         now = new Date(System.currentTimeMillis());    str_date = formatter.format(now);    txt_time.setText("時間:" + str_date);  }}

在AndroidManifest.xml檔案中加入許可權:

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

運行前先開啟GPS衛星,運行結果如下圖所示:

讀者可以在室外訊號充足的地方試試,是可以擷取GPS位置的。

希望本文所述對大家的Android程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.