用户定位location
User Location能做什么?
1、获取用户的位置
2、追踪用户的移动
GPS定位比较准确,但是很费电
GPS定位:使用GPS卫星定位,需要在AndroidManifest.xml中声明权限:
NETWORK定位:使用信号接收塔和WIFI介入点进行定位,需要在AndroidManifest.xml文件中声明权限:
1、Location Manager:用户管理android用户定位的服务
2、Location Providers:提供了多种定位方式供开发者选择
Criteria可以设置一系列的查询条件,可以根据指定的Criteria条件来过滤获得LocationProvider
不同的LocationProvider决定了定位能力,包括费用、耗电多少、精确度,还会有一些方向、速度、和高速信息。
获取用户当前位置的步骤:
1、在AndroidManifest.xml当中声明权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2、获取LocationManager对象
3、选择LocationProvider
4、绑定LocationListener对象
public class MainActivity extends Activity {
LocationManager lm;
MyLocationListener listener = new MyLocationListener();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.genzong).setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//第一个参数选择合适的provider,第二个参数是时间间隔是1秒中,
//第三个参数是位置发生0米的变化就会触发,第四个参数是触发的监听器
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, listener);
}
});
findViewById(R.id.dingwei).setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
printLocation(location);
}
});
findViewById(R.id.criteria).setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
System.out.println("R.id.criteria");
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
//设置精确程度为高精确
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//设置是否需要高度设置
criteria.setAltitudeRequired(false);
//是否需要方位设置
criteria.setBearingRequired(false);
//是否需要速度信息
criteria.setSpeedRequired(true);
//是否产生费用
criteria.setCostAllowed(true);
// //获取最符合条件的LocationProvider,true表示只返回可以使用的locationProvider
// String bestProvider = lm.getBestProvider(criteria, true);
//获取所有符合条件的locationProvider,false表示不可用的locationProvider也显示出来
List<String> matchProviders = lm.getProviders(criteria, false);
for(String temp : matchProviders){
System.out.println(temp);
}
}
});
}
public static void printLocation(Location l){
System.out.println("jingdu :" + l.getAccuracy());
System.out.println("gaodu : " + l.getAltitude());
System.out.println("fangxiang : " + l.getBearing());
System.out.println("sudu : " + l.getSpeed());
}
public class MyLocationListener implements LocationListener{
//位置更新的时候调用下面的方法
@Override
public void onLocationChanged(Location location) {
System.out.println("jingdu : " + location.getLongitude());
System.out.println("weidu : " + location.getLatitude());
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}
回忆过去,珍惜现在,放眼未来

浙公网安备 33010602011771号