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

微信模拟位置想在哪就在哪(GPS欺骗)微信模拟位置是通过位置欺骗,让微信误以为我们就在当前的位置进行周边好友的搜索与添加。这是一个很老的功能,为什么说很老呢?因为这是在android4.1的时候流行的一个功能,android在4.4推出后这个功能基本不能使用了!即使很老但是最近也碰到了这样的需求,不过针对特殊的群体,手机定制而来,就没有限制了!首先我们要知道怎么用:首先:我们从设置里找到开发者选项(开发者都知道):在这里就是,开发人

大家好,又见面了,我是你们的朋友全栈君。

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

这是一个很老的功能,为什么说很老呢?因为这是在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以上,亲们要给个链接啊!不要忽悠我呀…………..

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132294.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ROC曲线详解

    ROC曲线详解最近学习遇到这个概念,看了半天总算明白了这个曲线的意义。—————————————————————————————————分割线1ROC曲线的概念受试者工作特征曲线(receiveroperatingcharacteristiccurve,简称ROC曲线),又称为感受性曲线(sensitivitycurve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应

    2022年5月17日
    60
  • java读取xml(当xml放在包里时)

    java读取xml(当xml放在包里时)

    2021年9月2日
    52
  • 2021版idea激活码99年-激活码分享

    (2021版idea激活码99年)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    134
  • 【html】【一个简单的用户登录页面代码】

    【html】【一个简单的用户登录页面代码】结果代码&lt;!DOCTYPEhtml&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;用户登录.html&lt;/title&gt; &lt;metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"&gt;&lt;met

    2022年6月12日
    33
  • Visual Studio 2008 序列号 激活 vs2008[通俗易懂]

    Visual Studio 2008 序列号 激活 vs2008[通俗易懂]
    VisualStudio2008简体中文试用版(90天)变永久正式版的两种方法:
    一、先安装试用版,然后在“添加或删除程序”里找到VS2008,点“更改/删除”就会看到一个输入序列号的地方,把下面这个序列号输进去即可,TeamSuite和Professional通用。
    二、把Setupsetup.sdb文件中的[ProductKey]项中对应的序列号即可。
    因为九十天试用版本已经是rtm版本。所以改变序列号以后的升级或者安装,就会变成正式版,不再

    2022年8月10日
    37
  • NamedParameterJdbcTemplate学习总结

    NamedParameterJdbcTemplate学习总结NamedParameterJdbcTemplate学习总结

    2022年4月20日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号