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

查找位置:Google Play定位服务或Android平台定位API

益泰平
2023-03-14

我正在尝试为我的新导航应用获取用户位置。我想经常检查用户的位置,而且必须准确。我使用示例中的以下代码来获取位置。

public class MainActivity extends Activity implements LocationListener {
private LocationManager locationManager;
private String provider;
private TextView a;
private TextView b;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    a = (TextView) findViewById(R.id.a);
    b = (TextView) findViewById(R.id.b);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    if (location != null) {
        System.out.println("Provider " + provider + " has been selected.");
        onLocationChanged(location);
    } else {
        a.setText("Location not available");
        b.setText("Location not available");
    }
}

@Override
protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(provider,0, 1, this);
}

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
public void onLocationChanged(Location location) {
    Double lat =  location.getLatitude();
    Double lng =  location.getLongitude();
    a.setText(String.valueOf(lat));
    b.setText(String.valueOf(lng));
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_SHORT).show();

}

@Override
public void onProviderDisabled(String provider) {
    Toast.makeText(this, "Disabled provider " + provider,
            Toast.LENGTH_SHORT).show();
}
}

但是位置坐标不会随着我的移动而更新,我总是得到一个恒定的值...有没有更好的方法来获取位置?根据android文档,我可以使用Google Play位置服务或Android平台位置API。我检查了两者的示例代码,它实现了LocationListener界面来获取用户位置。那么它们之间的实际区别是什么?

共有2个答案

解晟睿
2023-03-14

当我使用它时,我发现了两个好的来源:

>

  • 博客帖子:Android定位服务提供商。它包括一个关于使用FusedLocationProviderApi在Android中获取位置的完整教程。

    以下Android LocationClient类的答案已被弃用,但用于文档问题。

    基本上两者都谈到了Google I/O会话中提到的类似步骤,其中一个答案中提到了链接:

    >

  • 首先,要获取GoogleClientApi实例,例如:

    GoogleClientApi googleApiClient = new GoogleApiClient.Builder(locationActivity)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    

    然后像这样调用. connect()

    googleApiClient.connect();
    

    然后在回调onConnect中,获取最后一个位置,甚至可以根据您的需要请求位置更新,例如:

    LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
    

    如果需要请求位置更新,则可以使用requestLocationUpdates调用。

    希望有帮助。

  • 傅博容
    2023-03-14

    绝对要使用新的谷歌play定位服务。他们在室内工作比以前的场地经理好得多。我创建了一个示例,它使用新的google play定位服务,并定期在后台工作。过来看:

    https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android

     类似资料:
    • 我有一个android应用程序,将跟踪用户的位置。它被设置为使用WiFi/网络位置服务,如果可能的话,否则使用GPS_PROVIDER服务。当有wifi连接时,它工作得很好,但当我设置只从GPS获取位置时,应用程序崩溃了。通过测试,我得到了行location=locationmanager.getlastknownlocation(locationmanager.gps_provider);实际上

    • 我正在努力为我的问题找到解决办法。问题是我试图在奥利奥中启动后台服务,以便检索位置。我看到了这一点:https://developer.android.com/about/versions/oreo/background-location-limits但我正在努力寻找解决办法。 当我启动Foreground服务时,我看到:(IllegalStateException:不允许启动服务)异常,因为我试

    • 操作步骤: ①在"定位监控"模块,开启"实时监控"开关。 ②点击"实时位置",进入实时位置。 ③协作成员在手机端登录亿景智图APP,并允许访问位置服务,进入协作地图。协作成员在APP登录后实时定位头像由灰色变亮。 ④协作成员在APP登录后实时定位头像由灰色变亮。 提示: ●项目实施过程中,开启位置监控功能,管理人员(地图管理员、成员)可以在地图上实时查看成员的具体位置,方便工作协调和任务分派。 ●

    • 主要内容:实现,步骤 1,Service.java,步骤 2,Service1.java,Service2.java,步骤 3,InitialContext.java,步骤 4,Cache.java,步骤 5,ServiceLocator.java,步骤 6,ServiceLocatorPatternDemo.java,步骤 7服务定位器模式(Service Locator Pattern)用在我们想使用 JNDI 查询定位各种服务的时候。考虑到为某个服务查找 JNDI 的代价很高,服务定位器模

    • 服务定位器是一个了解如何提供各种应用所需的服务(或组件)的对象。在服务定位器中, 每个组件都只有一个单独的实例,并通过ID 唯一地标识。 用这个 ID 就能从服务定位器中得到这个组件。 在 Yii 中,服务定位器是 yii\di\ServiceLocator 或其子类的一个实例。 最常用的服务定位器是application(应用)对象,可以通过 \Yii::$app 访问。 它所提供的服务被称为a