arcgis for android 学习 - (7) 在真机上 模拟GPS
16lz
2022-08-09
必须先开启“允许模拟地点”
方法: 打开设备的,设置 - 应用程序 - 开发 - “允许模拟地点”
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
代码下载
更多相关文章
- android上一些方法的区别和用法的注意事项
- android Dialog大小修改
- android用户界面-组件Widget-地图视图MapView
- Ubuntu下查找.android/avd
- 编译android的linux内核
- Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
- android上一些方法的区别和用法的注意事项
- Android(安卓)4.0.1 源码下载,编译和运行
- linearLayout 和 relativeLayout的属性区别