arcgis for android 学习 - (7) 在真机上 模拟GPS

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

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

 

 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步”里名称是一致的。

 

 好了。让代码跑起来。

 

 

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

 

 package pdwy.qyzyMobile.GisModule;


import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Handler;
import android.util.Log;

class GpsMockManager {
     private Context mContext;

    Handler mHandler1;
     public String mMockProviderName = "spoof";
     private  int mPostDelayed = 10000;

    GpsFakePointProvider mGpsFakePointProvider;

     public GpsMockManager(String mockProviderName, Context context,
            Handler handler) {
         super();
        mMockProviderName = mockProviderName;
        mContext = context;
        mHandler1 = handler;

         //  mGpsFakePointProvider = new ChangedPointProvider();
        mGpsFakePointProvider =  new StaticPointProvider();
    }

     public String getmMockProviderName() {
         return mMockProviderName;
    }

    Runnable fakeProc =  new Runnable() {

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

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

     public  void StopFake() {
        mHandler1.removeCallbacks(fakeProc);
    }

     private  void setLocation( double longitude,  double latitude) {
        LocationManager locationManager = (LocationManager) mContext
                .getSystemService(Context.LOCATION_SERVICE);
         if (locationManager.getProvider(mMockProviderName) ==  null) {
            locationManager.addTestProvider(mMockProviderName,  falsetrue,
                     falsefalsefalsefalsefalse, 0, 5);
            locationManager.setTestProviderEnabled(mMockProviderName,  true);
        }
        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));
    }

     public  class GpsFakePoint {

         public GpsFakePoint( double longitude,  double latitude) {
             super();
             this.longitude = longitude;
             this.latitude = latitude;
        }

         public  double latitude;
         public  double longitude;
    }

     public  interface GpsFakePointProvider {
         public GpsFakePoint getGpsFakePoint();
    }

     public  class ChangedPointProvider  implements GpsFakePointProvider {
         private  double mLatitude = 1;
         private  double mLongitude = 1;

        @Override
         public GpsFakePoint getGpsFakePoint() {
             return  new GpsFakePoint(mLatitude++, mLongitude++);
        }

    }

     public  class StaticPointProvider  implements GpsFakePointProvider {
         public GpsFakePoint getGpsFakePoint() {
             return  new GpsFakePoint(116.9152, 39.4435);
             // return new GpsFakePoint(116.8737, 39.4328); // 偏左
            
// return new GpsFakePoint(116.886,39.4257);
            
        }
    }

} //  end class GpsMockManager

 


 

代码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值