android 如何写模拟定位程序
1、获取位置对象
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

2、获取位置提供者对象
LocationProvider provider = locationManager.getProvider(LocationManager.GPS_PROVIDER);

3、添加一个模拟位置提供者
locationManager.addTestProvider(
provider.getName()
, provider.requiresNetwork() // 请求网络
, provider.requiresSatellite() // 请求卫星
, provider.requiresCell() // 基站网络
, provider.hasMonetaryCost() // 收费还是免费
, provider.supportsAltitude() // 支持高度信息
, provider.supportsSpeed() // 支持速度信息
, provider.supportsBearing() // 支持方向信息
, provider.getPowerRequirement() // 电源需求
, provider.getAccuracy() // 经度
);

4、模拟一个定的定位的位置
Location location = new Location(LocationManager.GPS_PROVIDER);
location.setAccuracy(0);
location.setSpeed(0);
location.setBearing(0);
location.setLatitude(31.23491);
location.setLongitude(121.474755);
location.setAccuracy(0);
location.setTime(System.currentTimeMillis());
location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());

5、开启模拟位置提供者
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
locationManager.setTestProviderStatus(LocationManager.GPS_PROVIDER,
LocationProvider.AVAILABLE,
null,
System.currentTimeMillis()
);
设置模拟位置
locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, location);

6、获取刚才模拟的位置
location = (Location) locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);
StringBuilder sb = new StringBuilder();
sb.append("位置信息:\n");
sb.append("经度:");
sb.append(String.valueOf(location.getLongitude()));
sb.append("\n纬度:");
sb.append(String.valueOf(location.getLatitude()));
sb.append("\n高度:");
sb.append(String.valueOf(location.getAltitude()));
sb.append("\n速度:");
sb.append(String.valueOf(location.getSpeed()));
sb.append("\n方向:");
sb.append(String.valueOf(location.getBearing()));
String info = sb.toString();
Toast.makeText(Main.this, info, Toast.LENGTH_LONG).show();
