微信模拟位置想在哪就在哪(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以上,亲们要给个链接啊!不要忽悠我呀…………..

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm激活教程2021破解方法

    pycharm激活教程2021破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • C++11可变参数函数模板

    C++11可变参数函数模板

  • HTTP 和 HTTPS 的区别(面试常考题)「建议收藏」

    HTTP 和 HTTPS 的区别(面试常考题)「建议收藏」无论是在校学习还是找工作的时候,老师和面试官都问过同学http和https的区别。平时上网的时候也没有关注这个问题,只是知道计算机网络里Http的概念,所以最近才查资料好好补补这一块。其实这一块的知识延伸很广,如果之前不太了解加密算法和SSL协议,可以在学习了这个问题的基础上再做研究。一、Http和Https的基本概念Http:超文本传输协议(Http,HyperTextTrans…

  • css选择器nth-child()和nth-of-type()的应用

    css选择器nth-child()和nth-of-type()的应用

  • Log4j ConversionPattern参数的格式含义[通俗易懂]

    Log4j ConversionPattern参数的格式含义[通俗易懂]ConversionPattern参数的格式含义格式名含义%c输出日志信息所属的类的全名%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-ddHH:mm:ss},输出类似:2002-10-18-22:10:28%f输出日志信息所属的类的类名%l输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几

  • 哈佛结构和普林斯顿结构的区别_普林斯顿大学和哈佛大学哪个更厉害

    哈佛结构和普林斯顿结构的区别_普林斯顿大学和哈佛大学哪个更厉害哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。      哈佛结构的微处理器通常具有较高的执行效

发表回复

您的电子邮箱地址不会被公开。

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