必须先开启“允许模拟地点”

方法: 打开设备的,设置 - 应用程序 - 开发 - “允许模拟地点”

1.在AndroidManifest.xml 里添加相应的 “允许模拟位置的权限”

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

2.创建 一个 “用于模拟的坐标提供者”

LocationManager locationManager = (LocationManager) mContext .getSystemService(Context.LOCATION_SERVICE); if (locationManager.getProvider(mMockProviderName) == null) { locationManager.addTestProvider(mMockProviderName, false, true, false, false, false, false, false, 0, 5); locationManager.setTestProviderEnabled(mMockProviderName, true);

}

注意:mMockProviderName 是你随意定的名称,后面在使用(获得位置)时,用这个名称。

3.构建(模拟的)坐标位置

Location loc = new Location(mMockProviderName); loc.setTime(System.currentTimeMillis()); loc.setLatitude(latitude); loc.setLongitude(longitude); locationManager.setTestProviderLocation(mMockProviderName, loc);

Log.i("gps", String.format("once: x=%s y=%s", longitude, latitude));

注意:我们可以多次间歇的调用此方法来 模拟 位置的变化。

4.获得(使用)坐标位置。

loc = (LocationManager) context .getSystemService(Context.LOCATION_SERVICE);

loc.requestLocationUpdates(NAME_MOCK_GPS_PROVIDER, 1000, 10,

mListener);

这里的NAME_MOCK_GPS_PROVIDER的名称 和前面“第2步”里名称是一致的。

好了。让代码跑起来。

------------------------------------

packagepdwy.qyzyMobile.GisModule;


importandroid.content.Context;
importandroid.location.Location;
importandroid.location.LocationManager;
importandroid.os.Handler;
importandroid.util.Log;

classGpsMockManager{
privateContextmContext;

HandlermHandler1;
publicStringmMockProviderName="spoof";
private intmPostDelayed=10000;

GpsFakePointProvidermGpsFakePointProvider;

publicGpsMockManager(StringmockProviderName,Contextcontext,
Handlerhandler){
super();
mMockProviderName=mockProviderName;
mContext=context;
mHandler1=handler;

// mGpsFakePointProvider=newChangedPointProvider();
mGpsFakePointProvider= newStaticPointProvider();
}

publicStringgetmMockProviderName(){
returnmMockProviderName;
}

RunnablefakeProc= newRunnable(){

@Override
public voidrun(){
GpsFakePointpnt=mGpsFakePointProvider.getGpsFakePoint();
setLocation(pnt.longitude,pnt.latitude);
mHandler1.postDelayed(fakeProc,mPostDelayed);
}
};

public voidRunFake(){
mHandler1.postDelayed(fakeProc,mPostDelayed);
}

public voidStopFake(){
mHandler1.removeCallbacks(fakeProc);
}

private voidsetLocation( doublelongitude, doublelatitude){
LocationManagerlocationManager=(LocationManager)mContext
.getSystemService(Context.LOCATION_SERVICE);
if(locationManager.getProvider(mMockProviderName)== null){
locationManager.addTestProvider(mMockProviderName, false, true,
false, false, false, false, false,0,5);
locationManager.setTestProviderEnabled(mMockProviderName, true);
}
Locationloc= newLocation(mMockProviderName);
loc.setTime(System.currentTimeMillis());
loc.setLatitude(latitude);
loc.setLongitude(longitude);
locationManager.setTestProviderLocation(mMockProviderName,loc);

Log.i("gps",String.format("once:x=%sy=%s",longitude,latitude));
}

public classGpsFakePoint{

publicGpsFakePoint( doublelongitude, doublelatitude){
super();
this.longitude=longitude;
this.latitude=latitude;
}

public doublelatitude;
public doublelongitude;
}

public interfaceGpsFakePointProvider{
publicGpsFakePointgetGpsFakePoint();
}

public classChangedPointProvider implementsGpsFakePointProvider{
private doublemLatitude=1;
private doublemLongitude=1;

@Override
publicGpsFakePointgetGpsFakePoint(){
return newGpsFakePoint(mLatitude++,mLongitude++);
}

}

public classStaticPointProvider implementsGpsFakePointProvider{
publicGpsFakePointgetGpsFakePoint(){
return newGpsFakePoint(116.9152,39.4435);
// returnnewGpsFakePoint(116.8737,39.4328); // 偏左
// returnnewGpsFakePoint(116.886,39.4257);

}
}

} // endclassGpsMockManager


代码下载

更多相关文章

  1. android上一些方法的区别和用法的注意事项
  2. android Dialog大小修改
  3. android用户界面-组件Widget-地图视图MapView
  4. Ubuntu下查找.android/avd
  5. 编译android的linux内核
  6. Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
  7. android上一些方法的区别和用法的注意事项
  8. Android(安卓)4.0.1 源码下载,编译和运行
  9. linearLayout 和 relativeLayout的属性区别

随机推荐

  1. 成员函数可以重载吗?
  2. C语言中的三目运算符是什么
  3. c语言是面向什么的语言
  4. C语言中字符串连接函数是什么
  5. C语言中二叉树中序遍历怎么执行?
  6. 一个c语言程序总是从什么开始执行
  7. c++中static关键字的作用是什么?
  8. c语言真假是1和0吗?
  9. 学习asp.net core集成MongoDB的完整步骤
  10. c语言三种基本程序结构是什么?