【问题标题】:How to find device location in a timely manner如何及时找到设备位置
【发布时间】:2016-07-08 20:31:36
【问题描述】:

我正在创建一个需要查找本地设备的位置并将其与另一台设备的位置进行比较的应用。我正在尝试使用 Google Play 服务位置 API 来查找设备的位置,但似乎连接时间太长了。我还没有看到它连接。它要么真的很慢,要么设置不正确。这些 api 在连接时通常很快吗?

这是我所拥有的:

public class LocationHandler implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
{
    private Activity currActivity = null;
    private GoogleApiClient mGoogleApiClient = null;

    public LocationHandler(Activity act)
    {
        currActivity = act;
    }

    public void Setup()
    {
        if (mGoogleApiClient == null)
        {
            mGoogleApiClient = new GoogleApiClient.Builder(currActivity)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
            mGoogleApiClient.connect();
        }
    }

    @Override
    public void onConnected(@Nullable Bundle bundle)
    {
        Toast.makeText(currActivity, "Connected to service.", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onConnectionSuspended(int i)
    {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult)
    {

    }
}

我有以下权限:

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

我也在 build.gradle 中添加了这个:

compile 'com.google.android.gms:play-services:9.2.0'

【问题讨论】:

    标签: java android google-play-services location-services


    【解决方案1】:

    在这种情况下,我会使用 LocationManager:

    public class LocationHandler implements implements LocationListener{
    LocationManager mLocationManager;
    
      public void Setup(){
        mLocationManager = (LocationManager) getApplicationContext()
                .getSystemService(LOCATION_SERVICE);
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                500, 10, this);
      }
    
      @Override
      public void onLocationChanged(Location location) {
        //do something with your location
      }
    
      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {}
    
      @Override
      public void onProviderEnabled(String provider) {}
    
      @Override
      public void onProviderDisabled(String provider) {}
      }
    }
    

    这种方法直截了当,允许您跳过处理 Google Play 服务。

    【讨论】:

    • 我已经尝试过 LocationManager,但它也从未连接过。你知道它通常有多快吗?从我读到的 GPS 提供商可能需要 1-3 分钟才能找到一个设备,这太长了。也没有听说过更好的网络提供商。
    • GPS 提供程序可能需要 1-3 分钟来预热。因此,如果您在启动应用程序时禁用了位置并且必须启用它然后等待。如果您将位置设置为 GPS 并且它已打开,并且如果您在可以获得 GPS 信号的地方,它会在几秒钟内获取。您是否在可以获得 GPS 位置的地方使用实际设备?您也可以尝试启用所有提供商并在高精度模式下使用设备,而不是在设置中使用 GPS。
    • 所以你是说如果用户在他们的手机上已经打开了他们的位置跟踪,那么定位他们只需要一秒钟?因为我的手机总是打开它,但我无法连接它。我将重试 LocationManager 的实现,看看它对我有什么作用,我会更新。
    • 我正在使用我的移动设备进行测试。我只是将其设置为找到最佳提供商。希望这会有所帮助。
    • 我测试了它,它似乎没有做任何事情。我从来没有在任何被覆盖的方法中得到回调。我已经运行了另一个使用 GPS 的应用程序,以确保它找到我并且看起来很好。我在这里错过了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2013-12-02
    • 2015-10-01
    相关资源
    最近更新 更多