6
  • 我有一个 Android 应用程序,其中包含 Google Maps V2 作为功能的一部分。
  • 我有

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

    在我的清单中,以及地图工作所需的一切。

  • 我的应用程序没有在带有地图的屏幕上启动。

现在的问题是为什么我的手机(Galaxy Nexus,以防万一)在应用程序启动时开始在状态栏中显示 GPS 图标,但当我使用地图进入屏幕并开始使用它时却没有?当我不在地图屏幕上时,我不需要跟踪我的位置并使用电池电量。

例如,What's App messenger 也将 GPS 用于其地图,但该图标仅在您打开地图屏幕时显示,而不是在启动的第一个活动上显示。

谷歌搜索了几个小时,但一无所获。任何帮助将不胜感激!

编辑:

地图活动类

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);
}
4

3 回答 3

11

过了一会儿,我们发现问题出在我们项目中使用的 Flurry SDK 中......

默认情况下,Flurry 从应用程序开始就开始报告位置。要关闭它,我们使用:

FlurryAgent.setReportLocation(false);

... /_-

于 2013-06-17T07:22:05.803 回答
0

您必须实现连续获取位置的方法:使用 GPS(仅当它打开时),然后是 Wifi,然后是数据连接。此外,除了 FINE_LOCATION 之外,还请使用以下内容 -

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
于 2013-06-04T07:30:11.903 回答
0

我不确定这是否是最好的解决方案,但我使用了这种方法

在我的开始活动中,我这样做:

@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 图标不再困扰我。

于 2013-06-11T14:52:40.193 回答