微信模拟位置想在哪就在哪(GPS欺骗)

来源:互联网 发布:为什么淘宝突然打不开 编辑:程序博客网 时间:2024/04/30 06:15

微信模拟位置是通过位置欺骗,让微信误以为我们就在当前的位置进行周边好友的搜索与添加。

这是一个很老的功能,为什么说很老呢?因为这是在android4.1的时候流行的一个功能,android在4.4推出后这个功能基本不能使用了!即使很老但是最近也碰到了这样的需求,不过针对特殊的群体,手机定制而来,就没有限制了!

首先我们要知道怎么用:

首先:我们从设置里找到开发者选项(开发者都知道):
在这里就是,开发人员工具

这里写图片描述

然后:打开允许模拟位置:

这里写图片描述

进入代码阶段:

一、判断是否开启了地理位置模拟

 if (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0) {                        // 开启了地理位置模拟                        LocProvider();                    } else {                        UIUtils.showToast(getString(R.string.open_mock_location));                    }  private String mMockProviderName = LocationManager.GPS_PROVIDER; private void LocProvider() {        formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        time = new Date().getTime();        formatTime = formatter.format(time);        initLocation();        runFacke();    }

二、然后就需要进行初始化,位置模拟了

/**     * 初始化 位置模拟     */    public void initLocation() {        //开启服务        locationManager = (LocationManager) this                .getSystemService(Context.LOCATION_SERVICE);        LocationProvider provider = locationManager.getProvider(mMockProviderName);        if (provider != null) {            locationManager.addTestProvider(                    provider.getName()                    , provider.requiresNetwork()                    , provider.requiresSatellite()                    , provider.requiresCell()                    , provider.hasMonetaryCost()                    , provider.supportsAltitude()                    , provider.supportsSpeed()                    , provider.supportsBearing()                    , provider.getPowerRequirement()                    , provider.getAccuracy());        } else {            locationManager.addTestProvider(mMockProviderName, false, true, false,                    false, true, true, true, 0, 5);        }        locationManager.setTestProviderEnabled(mMockProviderName, true);        //新        locationManager.setTestProviderStatus(mMockProviderName, LocationProvider.AVAILABLE, null,                System.currentTimeMillis());        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)                != PackageManager.PERMISSION_GRANTED &&                ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)                        != PackageManager.PERMISSION_GRANTED) {            return;        }        locationManager.requestLocationUpdates(mMockProviderName, 0, 0,                new LocationListener() {                    @Override                    public void onLocationChanged(Location location) {                        double latitude = location.getLatitude();                        double longitude = location.getLongitude();                        LogUtils.e("latitude==>" + latitude + "------longitude===>" + longitude);                    }                    @Override                    public void onStatusChanged(String s, int i, Bundle bundle) {                    }                    @Override                    public void onProviderEnabled(String s) {                    }                    @Override                    public void onProviderDisabled(String s) {                    }                });    }

三、这儿需要开启一个线程机制来实现我自己设置的GPS位置,一直改变你手机的物理位置。

public void runFacke() {        isSimulateStart = true;        // 开启线程,一直修改GPS坐标        thread = new Thread(new Runnable() {            @Override            public void run() {                while (isSimulateStart) {                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    setLocation(Double.valueOf(latitude),                            Double.valueOf(longitude));                }            }        });        thread.start();    }

四、设置GPS的位置

/**     * setLocation 设置GPS的位置     */    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)    private void setLocation(double latitude, double longitude) {        try {            Location location = new Location(mMockProviderName);            location.setLatitude(latitude);            location.setLongitude(longitude);            location.setAltitude(2.0f);  // 高程(米)            location.setBearing(180);  // 方向(度)            location.setSpeed(10);  //速度(米/秒)            location.setAccuracy(0.1f);  // 精度(米)            location.setTime(System.currentTimeMillis());            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {                location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());            }            locationManager.setTestProviderLocation(mMockProviderName, location);        } catch (Exception e) {            e.printStackTrace();        }    }

一定要加权限

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

好了这个时候模拟位置完成了,我模拟的位置是“上海”

我们来看看效果

这里写图片描述

这样就完成了,

注意:不要打包安装正式版的,这个权限是debug权限

好了如果需要关闭模拟位置:

  public void stopMockLocation() {        if (isSimulateStart) {            try {                locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);            } catch (Exception ex) {                // 若未成功addTestProvider,或者系统模拟位置已关闭则必然会出错            }            isSimulateStart = false;        }    }

如果有什么好的方法,或者确定支持4.4以上,亲们要给个链接啊!不要忽悠我呀…………..

0 0
原创粉丝点击