软件编程
位置:首页>> 软件编程>> Android编程>> Android中GPS定位的用法实例

Android中GPS定位的用法实例

作者:shichen2014  发布时间:2021-07-26 23:26:29 

标签:Android,GPS

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卫星,运行结果如下图所示:

Android中GPS定位的用法实例

读者可以在室外信号充足的地方试试,是可以获取GPS位置的。

希望本文所述对大家的Android程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com