我想找到我当前位置的经度和纬度,但我一直得到NULL.
double lat = loc.getLatitude(); //Cause the result is null, so can't know longitude and latitude
double lng = loc.getLongitude();
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider); //result is null!
Run Code Online (Sandbox Code Playgroud)
这是获取GPS状态的代码.它工作正常:
public void onGpsStatusChanged(int event) { // get the GPS statue
LocationManager locationManager = (LocationManager) GpsActivity.this.getSystemService(Context.LOCATION_SERVICE);
GpsStatus status = locationManager.getGpsStatus(null);
String satelliteInfo = updateGpsStatus(event, status);
myTextView.setText(satelliteInfo);//work fine ,searched satellite:16
}
};
private String updateGpsStatus(int event, GpsStatus status) {
StringBuilder sb2 = new …Run Code Online (Sandbox Code Playgroud) 我使用GPS来获取位置的经度和纬度,但现在我想得到位置的每个细节,如:国家,城市,州,邮政编码,街道号码等.当前位置的最大细节.
码:
public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
// flag for GPS status
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
// flag for GPS status
boolean canGetLocation = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
String country;
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates …Run Code Online (Sandbox Code Playgroud) 想听gps的可用性.跟着这个.但是,onGpsStatusChanged即使我禁用/启用了gps ,也没有被解雇.试过多部手机.另外,查看相关的stackoverflow Qns,例如this,this和this.但是没有成功.任何帮助表示赞赏.谢谢!
代码片段:
倾听者
Listener mGPSListener = new GpsStatus.Listener() {
@Override
public void onGpsStatusChanged(final int event) {
Log.d(TAG, "---onGpsStatusChanged---");
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
Log.d(TAG, "GPS_EVENT_STARTED");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
Log.d(TAG, "GPS_EVENT_FIRST_FIX");
break;
case GpsStatus.GPS_EVENT_STOPPED:
Log.d(TAG, "GPS_EVENT_STOPPED");
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Log.d(TAG, "GPS_EVENT_SATELLITE_STATUS");
break;
default:
Log.d(TAG, "SOMETHING_ELSE");
break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
服务
.....
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Log.d(TAG, "onStartCommand");
Context …Run Code Online (Sandbox Code Playgroud) 在javascript中,使用Google maps apis指定选项,例如google.maps.TravelMode.DRIVING.我们TravelMode在android中有任何等价物吗?我看不到任何内容android.location.LocationManager或者android.location.Criteria
我想到了以下选项:
使用一些TravelMode替代方法,获得近似于最近的街道/道路的坐标.
或者,(不是优选的,因为它会很慢)通常获得坐标,然后可能将它发送到一些谷歌api(这将是非常慢,因为有很多点)并将坐标校正到最近的街道坐标.或者如果存在一些(谷歌地图)javascript框架,它可以用于获得相应的街道坐标.
EDIT1:
我也研究了这个.因而进入android.location.Geocoder.在getFromLocation这一类似乎做的大部分工作.但是,我担心,在获取最近的地址时会有额外的延迟.
我在android中使用Fused Location Provider库.它工作得非常好.但我有一个问题,它至少在5秒内返回位置更新.
我已经尝试过所有的事情,例如将最小更新时间设置为1毫秒,距离设置为0.01米,优先级设置为 PRIORITY_HIGH_ACCURACY
我的代码:
locationrequest.setInterval(1); // 1 milliseconds
locationrequest.setSmallestDisplacement(0.01f); // 0.01 meters locationrequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
但没有用,两次连续位置更新之间的最短时间仍为5秒.
我的问题是:有没有办法将位置更新时间减少到5毫秒?
- >我只需要10分钟的位置更新,所以没有高电池消耗的问题.
- >我需要任何方式(可能):是否有可用的外部硬件,通过蓝牙连接并发送位置更新达到该级别?
编辑:
让我问你一个不同的问题: 什么是最短的位置更新时间以及如何实现?
假设我要跟踪一辆以400公里/小时的速度行驶的汽车,这意味着在约50毫米的时间内行驶5米.那么你能建议更好的方法来跟踪这辆车吗?

最近,我的ola cabs应用程序在最新更新后,在运行时询问了位置权限.它没有打开位置设置屏幕,只是单击是,我的设备的位置(GPS)已打开,应用程序继续进行,无需进入位置设置或任何设置屏幕.这个功能即将在Android M中出现,仅在MNC预览版中可用,所以我猜它在这个时间点不能用于设备.那么这个应用程序如何实现这个功能呢?
我有两个位置,我想以米为单位计算距离.我写了一些代码,但它并不完美.
private void getDistanceBetweenTwoPoints(double lat1,double lon1,double lat2,double lon2)
{
Location loc1 = new Location("");
loc1.setLatitude(lat1);
loc1.setLongitude(lon1);
Location loc2 = new Location("");
loc2.setLatitude(lat2);
loc2.setLongitude(lon2);
int R = 6371; // km
double dLat = deg2rad(lat2-lat1);
double dLon = deg2rad(lon2-lon1);
double a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double distanceInMeters = R * c;
Log.e("distanceInMeters",distanceInMeters/10000+"mm");
}
public double deg2rad(double deg) {
return deg * (Math.PI/180);
}
Run Code Online (Sandbox Code Playgroud)
如何计算米的距离?我的目标是,如果米> 200做某事.我怎样才能解决我的问题?
如果我的问题重复或简单,请向我道歉.在这个问题上苦苦挣扎了很长时间.
即使我的应用程序切换到后台,我也需要跟踪用户的位置.在冲浪时我发现位置处理器代码可以写成服务,因此服务不会被杀死,我们可以获得用户的位置(在状态 - 应用程序在前台和应用程序在后台运行时).
当我的应用程序处于前台时,我能够连续跟踪用户的位置.但是,当我将应用程序切换到后台时,我觉得我的位置服务已经死亡,而我无法跟踪用户的位置.请在下面找到我的代码:
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testmylocation"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyService"/>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java:
package com.example.testmylocation;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.Window;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
startService(new Intent(this, MyService.class)); …Run Code Online (Sandbox Code Playgroud) 我从这个例子开始,在用户之间绘制2个地址之间的路由.这是工作.http://blog.rolandl.fr/1357-android-des-itineraires-dans-vos-applications-grace-a-lapi-google-direction
但是现在我想画一条从当前位置到另一个目的地的路线,由用户输入.我的问题是我不知道如何检索当前位置,在这种情况下.我试过这样做:
LocationManager locationmanager=(LocationManager)this.getSystemService(LOCATION_SERVICE);
final double longitude=locationmanager.getLongitude();
final double latitude=locationmanager.getLatitude();
Run Code Online (Sandbox Code Playgroud)
但它不起作用......我想我正在混合我发现的每一个例子,而且它根本不好.
你能帮我么 ?
这是我的MapActivity:在我的MainActivity公共类中由用户键入的接收2地址MapActivity扩展Activity实现LocationListener {private GoogleMap googlemap;
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
// Recuperation des composants graphiques
googlemap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
//Recuperations des adresses depart-arrivee
// RETRIEVE DEPARTURE AND DESTINATION ADDRESS
/*
* For editDepart, I would like to replace it by my Current location
*/
final String editDepart = getIntent().getStringExtra("DEPART");
final String editArrivee = getIntent().getStringExtra("ARRIVEE");
/* Appel de la méthode asynchrone // ASYNCHRONOUS METHOD …Run Code Online (Sandbox Code Playgroud) 从PRIORITY_BALANCED_POWER_ACCURACY给出的准确度得到了多少?
HIGH_ACCURACY模式使用所有位置提供商,但是,它优先考虑位置提供商,并包括GPS和位置提供商.定位精度大约在10米范围内.
BALANCED_POWER模式将GPS排除在其位置提供商列表之外,并使用其他提供商,包括手机信号塔,wifi等.在这种情况下,位置精度约为40米.
NO_POWER不使用任何位置提供程序,而是从其他应用程序获取位置的被动模式.准确度可能是一英里或更长.它完全基于最近由其他应用程序获取的位置.
PRIORITY_BALANCED_POWER_ACCURACY是否完全排除了GPS提供商?我一直假设它仍然使用GPS提供商,但只有当网络提供商不可用时.任何澄清将不胜感激.
android ×10
android-location ×10
gps ×4
google-maps ×2
android-gps ×1
geolocation ×1
location ×1