Android(安卓)GPS定位及实例
使用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状态发生改变!"); } }}
更多相关文章
- Android(安卓)事件分发机制
- Android(安卓)播放视频的方法+播放测试地址 http
- Android(安卓)ObjectAnimator不调用onAnimationStart方法
- Cocos2d-x移植android加入震动效果
- Android(安卓)ApiDemos示例解析(34):App->Preferences->Preferenc
- android xutils 基本使用 方法
- android OkHttp3
- xposed框架的检测和反制
- 学习Android过程中的一些博客或工具收集