微信模拟位置想在哪就在哪(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MariaDB安装教程

    MariaDB安装教程注:从MariaDB10.4.3开始,不再提供预构建的数据目录,并且用户需要运行mysql_install_db.exe来创建数据目录1、解压到自定义路径E:\MariaDB\mariadb-10.5.4-winx642、将其中的bin加入path系统环境路径3、用管理员方式打开cmd,并打开bin目录4、输入mysql_install_db.exe–datadir=E:\MariaDB\mariadb-10.5.4-winx64\data–service=MyMar..

    2022年6月14日
    28
  • java编译后执行 错误:找不到或无法加载主类「建议收藏」

    java编译后执行 错误:找不到或无法加载主类「建议收藏」使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示:用eclipse或用ant则没有问题。其实原因很简单,我们忽略了2个细节。1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。2….

    2022年5月30日
    92
  • JavaScript—-什么是纯函数

    JavaScript—-什么是纯函数定义简单来说,一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数。这么说肯定比较抽象,我们把它掰开来看:函数的返回结果只依赖于它的参数。函数执行过程里面没有副作用。consta=1constfoo=(b)=&gt;a+bfoo(2)//=&gt;3foo函数不是一个纯函数,因为它返回的结果依赖于外部变量…

    2025年8月11日
    4
  • PHPStorm2017.1.3永久激活方法之本地激活成功教程激活

    PHPStorm2017.1.3永久激活方法之本地激活成功教程激活是时候升级你的phpstorm了,咱们马上行动!下载1、phpstormhttps://www.jetbrains.com/phpstorm/download/2、激活成功教程包激活成功教程补丁无需使用注册码,下载

    2022年7月2日
    37
  • java实现手机短信验证全过程[通俗易懂]

    java实现手机短信验证全过程[通俗易懂]手机短信验证现在在各种系统可以说都是用的非常普遍的,这个可能是方便和安全性的考虑,所以才广泛的使用,这篇文章就以一个短信接口的实例,来讲解一下怎么使用短信接口。一、前期工作首先,我们需要选定一家短信接口的公司,然后去注册和获取一系列的ID等,然后就可以正式的创建我们的短信业务了。下面以某个短信接口为例讲解。1.1、注册进入这个网址注册一个账户1.2、获取到ACCOUNT…

    2022年7月21日
    16
  • html flex上下居中,css3 flex实现div内容水平垂直居中的几种方法

    html flex上下居中,css3 flex实现div内容水平垂直居中的几种方法一、flex-direction:(元素排列方向)※flex-direction:row(横向从左到右排列==左对齐)※flex-direction:row-reverse(与row相反)※flex-direction:column(从上往下排列==顶对齐)※flex-direction:column-reverse(与column相反)二、flex-wrap:(内容一行容…

    2022年5月7日
    40

发表回复

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

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