在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;@Overrideprotected 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);}@Overridepublic 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卫星,运行结果:

由于在室内,并且手机质量不好,没获取出来,在室外是可以获取的。

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. AIR Native Extension的使用(Android)一 : 打包ane
  3. android之BitMap
  4. Android(安卓)开发中的倒计时
  5. [android]在上下文菜单的选中事件中获取列表选中的元素
  6. [Android]在App中使用相机
  7. Android获取设备唯一标识完美解决方案
  8. android 定位服务
  9. Android(安卓)Q 电量使用图分析 show app usage

随机推荐

  1. 猎头职位【互联网热招岗位整理—Android
  2. android AIDL服务
  3. Android(安卓)应用程序窗体显示状态操作(r
  4. Android与JS之间的互相调用交互(一)
  5. 64位ubuntu11.10使用git下载android源码
  6. android amr编解码
  7. [Android(安卓)调试/测试] Android(安卓)
  8. Android入门篇六:使用意图传递数据之返回
  9. android修炼大法
  10. Android异步处理系列文章索引