zoukankan      html  css  js  c++  java
  • 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卫星,运行结果:

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

  • 相关阅读:
    论人力资源的危机及其对策(3)
    maven常见问题问答
    bigtall的敏捷日记(1)
    项目管理沙龙的第一次聚会纪要
    论人力资源的危机与对策(2)
    Crest的OO核心实现
    阿里巴巴图标库,助力微信小程序开发
    微信小程序漂亮的搜索框【样式】
    C# windows 服务看门狗
    微信小程序生命周期
  • 原文地址:https://www.cnblogs.com/mstk/p/3491494.html
Copyright © 2011-2022 走看看