记录一下Android APP调用Location功能的使用方法。
主要是LocationManager,LocationListener这两个:
1.LocationManager
可以用来获取当前的位置,追踪设备的移动路线,或设定敏感区域,在进入或离开敏感区域时设备会发出特定警报 。
requestLocationUpdates(provider,1000L,0.0F,MainActivity.this.locationListener);
2.LocationListener
位置监听,监听位置变化,监听设备开关与状态。
LocationListener listener=new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
};
APP 的实现,直接贴代码鸭,主要是两个button控件去控制定位请求的开关,TextView打印定位位置的相关信息
package com.example.gps;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
//定义控件和位置服务的对象
public static Button button1;
public static Button button2;
public static TextView tv1;
public LocationManager locationF = null;
public LocationListener locationListener = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载当前的布局文件
setContentView(R.layout.activity_main);
this.button1=((Button)findViewById(R.id.button1));
this.button2=((Button)findViewById(R.id.button2));
this.tv1=(TextView)findViewById(R.id.TextView1);
//调用getSystemService()方法来获取位置服务
final LocationManager locationF=((LocationManager)getSystemService(Context.LOCATION_SERVICE));
//创建button1的点击事件监听
/*button1点击事件主要实现:创建Criteria对象,利用它去获取最优的位置服务
* 创建LocationListener去监听当前位置信息
* 在位置信息变化时在onLocationChanged()方法中获取当前位置信息(经纬度/海拔/时间)
*/
this.button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//判断当前locationListener是否空
if (locationListener != null) {
locationF.removeUpdates(locationListener);
}
//重置TextView显示的位置信息
MainActivity.tv1.setText("");
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(false);
String provider=locationF.getBestProvider(criteria, true);
//查看当前使用的Location Provider
Toast toast=Toast.makeText(getApplicationContext(), "当前使用的provider:"+provider, Toast.LENGTH_SHORT);
toast.show();
MainActivity.this.locationListener=new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
double d1 = location.getLatitude();//获取经度
double d2 = location.getLongitude();//获取纬度
double d3 =location.getAltitude();//获取海拔
Date d4 =new Date(location.getTime());//获取时间
MainActivity.this.tv1.setText("经度:"+d1+"\n纬度:"+d2+"\n海拔:"+d3+"\n时间"+d4);//打印位置信息
}
};
//通过requestLocationUpdates()去请求定位
locationF.requestLocationUpdates(provider,1000L,0.0F,MainActivity.this.locationListener);
}
});
//创建button2的点击事件监听,使用removeUpdates() remove当前的位置监听LocationListener,停止位置请求。
this.button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//判断当前locationListener是否空
if (MainActivity.this.locationListener != null) {
locationF.removeUpdates(MainActivity.this.locationListener);
}
}
});
}
}
Manifest文件必须加上两个权限允许
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
结果截图:
具体可看代码的备注信息。