使用GPS 定位,首先,需要在清单文件(AndroidManifest.xml)中注册获取定位的权限:

1.获取位置管理器对象LocationManager

import android.location.LocationManager;      LocationManager lm;  //     lm =(LocationManager) this.getSystemService(Context`.LOCATION_SERVICE);  //

2.一般使用LocationManager的getLastKnownLocation(LocationManager.GPS_PROVIDER);方法获取Location对象

String provider = LocationManager.GPS_PROVIDER;// 指定LocationManager的定位方法Location location = locationManager.getLastKnownLocation(provider);// 调用getLastKnownLocation()方法获取当前的位置信息

不过不建议用这种方法,有几点原因:
一,在很多提供定位服务的应用程序中,不仅需要获取当前的位置信息,还需要监视位置的变化,在位置改变时调用特定的处理方法 ,其中LocationManager提供了一种便捷、高效的位置监视方法requestLocationUpdates(),可以根据位置的距离变化和时间间隔设定,产生位置改变事件的条件,这样可以避免因微小的距离变化而产生大量的位置改变事件 。
二,当你开启GPS,provider的值为GPS。这时的定位方式为GPS,由于GPS定位慢,所以它不可能立即返回你一个Location对象,所以就返回null了。
关于这个问题,参考链接:
1.android定位的实现
2.Android位置服务介绍,并介绍如何通过LocationManager对象获取位置信息

3.Android开发获取GPS位置,包含apn\wifi\gps 几种方法

3.推荐locationManager.requestLocationUpdates();方法
LocationManager中设定监听位置变化的代码如下:

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10,new MyLocationListener());

接下来介绍上面这行代码的各个参数,第一个参数是我们之前指定LocationManager的定位方法,GPS定位或网络定位,第二个参数指的是产生位置改变事件的时间间隔,单位为微秒,第三个参数指的是距离条件,单位为米,第四个参数是回调函数,用于处理位置改变事件,即设置LocationListener监听器。总的来说,那一行代码将产生位置改变事件的条件设定为距离改变10米,时间间隔为2秒。

4.使用location对象具有的getLongitude()和getLatitude()获取经纬度数据

tv_01.setText("经度:"+loc.getLongitude());            tv_02.setText("纬度:"+loc.getLatitude());

5.具体实现的简单demo代码如下

package introduction.android.gpsLocationin;/* * 本工程GPSLocation的功能是使用GPS实时定位,实时显示手机的经纬度 */import introduction.android.gpsLocation.R;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.location.LocationListener;import android.location.LocationManager;  //import android.location.Location;   //import android.os.Bundle;import android.provider.Settings;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {    private Button btn_listen;    private TextView tv_01,tv_02;    LocationManager lm;  //    Location loc;  //    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lm =(LocationManager) this.getSystemService(Context.LOCATION_SERVICE);  //        //检测GPS状态(是否开启)        if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)){  //若未打开GPS            Toast.makeText(MainActivity.this,"请开启GPS服务",Toast.LENGTH_LONG).show();            Intent myintent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);            startActivity(myintent);  //运行手机的设置程序        }           btn_listen=(Button) findViewById(R.id.btn_listen);        tv_01=(TextView) findViewById(R.id.tv_01);        tv_02=(TextView) findViewById(R.id.tv_02);        btn_listen.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new MyLocationListener());            }        });     }    //位置监听器方法    class MyLocationListener implements LocationListener{  //位置监听器,作为方法参数        @Override        public void onLocationChanged(Location loc) {            // TODO Auto-generated method stub            tv_01.setText("经度:"+loc.getLongitude());            tv_02.setText("纬度:"+loc.getLatitude());        }        @Override        public void onProviderDisabled(String provider) {            //当provider被用户关闭时调用            Log.i("GpsLocation","provider被关闭!");        }        @Override        public void onProviderEnabled(String provider) {            //当provider被用户开启后调用            Log.i("GpsLocation","provider被开启!");        }        @Override        public void onStatusChanged(String provider, int status, Bundle extras) {            //当provider的状态在OUT_OF_SERVICE、TEMPORARILY_UNAVAILABLE和AVAILABLE之间发生变化时调用            Log.i("GpsLocation","provider状态发生改变!");        }           }}

更多相关文章

  1. Android(安卓)事件分发机制
  2. Android(安卓)播放视频的方法+播放测试地址 http
  3. Android(安卓)ObjectAnimator不调用onAnimationStart方法
  4. Cocos2d-x移植android加入震动效果
  5. Android(安卓)ApiDemos示例解析(34):App->Preferences->Preferenc
  6. android xutils 基本使用 方法
  7. android OkHttp3
  8. xposed框架的检测和反制
  9. 学习Android过程中的一些博客或工具收集

随机推荐

  1. Android之布局
  2. Android切换语言
  3. android中的selector背景选择器
  4. Android(安卓)SurfaceView使用dirty rect
  5. android HAL简记
  6. H5做的商城客户端,效果很不错
  7. IDA Pro 远程调试Android进程环境配置
  8. Android P 中的新文本特性
  9. Android显示提示信息,实现两个界面之间的
  10. Android ADB的使用