gpt4 book ai didi

Android:模拟位置几秒钟后变回原始位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:40 27 4
gpt4 key购买 nike

我有一个 Android 应用程序,我需要用户在其中模拟他们的当前位置。下面是我使用的代码,让用户按下绿色按钮开始模拟他们的位置。

当按下“绿色按钮”时,下面的代码开始伪造位置。

greenButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.addTestProvider(LocationManager.GPS_PROVIDER,
"requiresNetwork" == "",
"requiresSatellite" == "",
"requiresCell" == "",
"hasMonetaryCost" == "",
"supportsAltitude" == "",
"supportsSpeed" == "",
"supportsBearing" == "",
Criteria.POWER_LOW,
Criteria.ACCURACY_FINE);

Location newLocation = new Location(LocationManager.GPS_PROVIDER);
newLocation.setLatitude(fakeLocation.getLatitude());
newLocation.setLongitude(fakeLocation.getLongitude());
newLocation.setAccuracy(fakeLocation.getAccuracy());
newLocation.setTime(System.currentTimeMillis());
newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
lm.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
lm.setTestProviderStatus(LocationManager.GPS_PROVIDER,
LocationProvider.AVAILABLE,
null, System.currentTimeMillis());
lm.setTestProviderLocation(LocationManager.GPS_PROVIDER, newLocation);
}
});

当我在 map 上放置一个标记并按下绿色按钮时。位置模拟开始。那个“假位置”成为我当前的位置。

但是大约 10-20 秒后,模拟就结束了。我的“真实位置”成为我当前的位置。我在网上看到了很多示例,它们使用的代码与我用来模拟位置的代码相同。我不知道为什么我的应用程序会发生这种情况。任何帮助将不胜感激。

最佳答案

首先,位置请求会影响您为适当的位置提供者模拟的位置。

如果您为 GPS 提供者创建并设置模拟位置,然后再次向 GPS 提供者发出位置请求,则模拟将一直存在,直到 GPS 硬件接收到新位置。这可能需要 10-20 秒或更长时间(但大约 10-20 秒后,模拟就结束了...)

而且这个问题也是一些虚假位置应用程序问题的答案。您会看到诸如“使用此应用程序后我无法获取我当前的真实位置!!!”之类的评论。在市场上。因为他们需要像您一样发出位置请求。

最后,请在服务中循环模拟操作。我建议在后台线程上执行此操作,可能每 1 或 2 秒执行一次。通过这种方式,您可以减少其他应用程序可能的位置请求的影响。

Handler mHandler;

private void loopMocking(){
mHandler.post(mMockRunnable);
}

private Runnable mMockRunnable = new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
}

newLocation.setTime(System.currentTimeMillis());
lm.setTestProviderLocation(LocationManager.GPS_PROVIDER, newLocation);

mHandler.postDelayed(mMockRunnable, 1000); // At each 1 second
}
};

关于Android:模拟位置几秒钟后变回原始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41201528/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com