当前位置: 首页 > 知识库问答 >
问题:

如何实施我的地理定位是真正的GPS,而不仅仅是我的网络endpoint的被动定位?

戎鹏云
2023-03-14

我们有自己控制的内部平板电脑,我们要求它们记录的位置尽可能准确。我尽我所能打开真正的GNSS GPS,但getLastKnownLocation(“GPS”)总是返回null

我们使用的是三星Galaxy Tab A7,SM-T500,其规格保证它有一个真正的GPS GNSS无线电接收器。谷歌地图正确识别了我的秘密巢穴。

我们的Androidanifest.xml请求GPS权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <activity
        android:name=".MainActivity"
        android:foregroundServiceType="location"
        ...
        >

在平板电脑的设置中,我们的应用程序具有“仅在应用程序使用时”的位置权限,这很好,因为我们的应用程序主导着我们的平板电脑并且是交互式的。我们的平板电脑不用于车辆,因此位置只需在过去10分钟左右内准确即可。

locationManager。isProviderEnabled(LocationManager.GPS_PROVIDER)返回true,与被动_PROVIDER网络_PROVIDER的调用一样。“融合”提供程序不可用。

然后我们称之为,提取各种位置并返回最准确的位置:

private static Location getLastKnownLocation(@NonNull LocationManager locationManager) {
    List<String> providers = locationManager.getProviders(true);
    Location bestLocation = null;

    for (String provider : providers) {
        Location l = locationManager.getLastKnownLocation(provider);

        if (l == null)
            continue;

        if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy())
            bestLocation = l;  //  Found best last known location: %s", l);
    }

    return bestLocation;
}

我们得到的只是“被动的”。全球定位系统位置是否特别需要通过locationManager.requestLocationUpdate()往返,或者getLastNotnloction()足够好?

共有1个答案

魏彦
2023-03-14

其他地方也有类似的答案,但这条线索值得结束。似乎getLastKnownLocation()不适用于GPS和GNSS卫星,因此Phantom Lord提示正确的解决方案是启用我的GPS主要活动:

public class MainActivity扩展AppCompatActivity实现LocationListener{

然后在onCreate()中打开侦听器:

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    if (locationManager != null) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;  // TODO  spank user
        }
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this);
    }

然后捕捉更新:

private Location gpsLocation = null;

@Override
public void onLocationChanged(Location location) {
    gpsLocation = location;
}

现在有一个新问题:为什么被动定位精度约为5米,而GPS定位精度约为14米?这是一个天真的平板电脑,所以它肯定不知道我的家庭地址等等。根据我的网络垃圾邮件,我的IP地址在附近的一个城市。。。

 类似资料:
  • 问题内容: 我们正在使用PHP ORM Doctrine。我正在创建这样的查询: 然后在函数中添加各种where子句和适当的东西,像这样 稍后,在为该查询对象添加对象之前,我想打印出原始SQL以便对其进行检查,并执行以下操作: 但是,这只会打印出准备好的语句,而不是完整的查询。我想查看它发送给MySQL的内容,但是它正在打印出一条准备好的语句,包括。有什么办法可以查看“完整”查询吗? 问题答案:

  • 问题内容: 有没有一种方法可以使GPS一次访问,而不必使用不断检查位置更新的弯针? 在我的场景中,我感兴趣的只是查找当前坐标,而不是与GPS卫星的连续连接。有谁知道如何做到这一点?提前致谢。 问题答案: 首先检查最近知道的位置是否是最近的。如果没有,我相信您必须设置onLocationChanged侦听器,但是一旦获得第一个有效位置,就可以随时停止更新流。 加成

  • 具有类型的HashMap 希望更新主地图内地图的所有键值对。是一个方法,它在添加值后返回。 我如何在上面的代码中也更新?将值增加1

  • 切换到 JDK8 后,清单。MF Attributes 开始返回 https://bugs.openjdk.java.net/browse/JDK-8201636 这表明这是 Oracle 在 JDK 8u151-8u172 中引入的一个错误。 我使用pom.xml和IntelliJ IDEA。指定(标签 < br > < code > JAVA _ HOME 设置为JDK10 我安装了< cod

  • 我正在尝试使用java(JDA)设置discord bot,但在服务器上使用它时遇到了一些问题。它适用于直接消息,但由于某些原因,它不能在服务器上使用。我通过intellij将该项目设置为Maven项目。 我是从一个 这在DM中运行良好,但在服务器中不起作用。 以下是我迄今为止所尝试的: 1. 我把它从收到的消息改为: 这在我的服务器上仍然不起作用,在dms中也不起作用。 2.我更改了bot的权限

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火