我有
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
在我的清单中,以及地图工作所需的一切。
现在问题是为什么我的手机(Galaxy Nexus,以防万一)在应用程序启动时开始在状态栏中显示GPS图标,但是当我到达带有地图的屏幕并开始使用它时却没有?我不在地图屏幕上时,我不需要跟踪我的位置并使用电池电量。
例如,什么的应用程序信使也使用GPS作为其地图,但只有当您打开地图屏幕时才显示图标,而不是在第一个启动的活动上显示。
用Google搜索了几个小时,但一无所获。 任何帮助将不胜感激!编辑:
MapActivity类
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
setContentView(R.layout.map_activity);
startGPS();
initMap();
mMapView = (MapView) findViewById(R.id.map_google_map);
mMapView.onCreate(null);
mGoogleMap = mMapView.getMap();
if (mGoogleMap != null) {
customizeGoogleMap();
loadAndFillMap();
}
}
private void startGPS() {
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
}
private void initMap() {
try {
MapsInitializer.initialize(this);
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
}
private void customizeGoogleMap() {
mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true);
mGoogleMap.setMyLocationEnabled(true);
}
private void loadAndFillMap() {
new LoadAndFillMapTask().execute();
}
private class LoadAndFillMapTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
String address = Session.appData().getSelectedAddress();
mMapLocation = Api.getMapApi().getMapLocation(address);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
fillMap();
}
}
private void fillMap() {
// filling Google Map with markers etc.
}
@Override
public void onDestroy() {
super.onDestroy();
if (mMapView != null) {
mMapView.onDestroy();
}
mLocationManager.removeUpdates(mLocationListener);
}
答案 0 :(得分:11)
过了一会儿,我们发现问题出在我们项目中使用的Flurry SDK中......
默认情况下,Flurry会从应用开始直接报告位置。为了关闭它,我们使用了:
FlurryAgent.setReportLocation(false);
... / _-
答案 1 :(得分:0)
你必须实现连续的定位方法:使用GPS(仅当它打开时),然后是Wifi,然后是数据连接。此外,除了FINE_LOCATION之外,还要使用以下内容 -
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
答案 2 :(得分:0)
我不确定这是否是最佳解决方案,但我使用了this approach。
在我的开始活动中,我喜欢这样:
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
if (GpsUtils.canToggleGps(this)) {
GpsUtils.turnGpsOff(this);
}
//...
}
在我的MapActivity中:
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
if (GpsUtils.canToggleGps(this)) {
GpsUtils.turnGpsOn(this);
}
//...
}
@Override
public void onDestroy() {
super.onDestroy();
if (GpsUtils.canToggleGps(this)) {
GpsUtils.turnGpsOff(this);
}
//...
}
状态栏中的GPS图标不再打扰我了。