我正在尝试为我的新导航应用获取用户位置。我想经常检查用户的位置,而且必须准确。我使用示例中的以下代码来获取位置。
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界面来获取用户位置。那么它们之间的实际区别是什么?
当我使用它时,我发现了两个好的来源:
>
博客帖子: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调用。
希望有帮助。
绝对要使用新的谷歌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