10年世界杯冠军_梅西2018年世界杯 - kefulq.com

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

德国世界杯歌曲 2025-09-11 01:50:14

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

这是一个很老的功能,为什么说很老呢?因为这是在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();

}

}

一定要加权限

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

我们来看看效果

这样就完成了,

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

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

public void stopMockLocation() {

if (isSimulateStart) {

try {

locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);

} catch (Exception ex) {

// 若未成功addTestProvider,或者系统模拟位置已关闭则必然会出错

}

isSimulateStart = false;

}

}

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