出于某种原因,当我的应用程序被放入后台时,并不总是调用onpause方法。这个或MyLocationOverlay
没有正确禁用。
我的应用使用谷歌地图和MyLocationOverlay
。启动应用时,我在MyLocationOverlay.enableMyLocation()
方法中拨打onResume
。在onPause
方法中,我调用了MyLocationOverlay.disableMyLocation()
。但是,当我按下主页键或后退键进入主屏幕时,GPS会保持运行,如状态栏顶部所示,带有gps图标。
编辑:它在模拟器或手机上都不起作用。
EDIT2:当我使用高级任务杀手杀死它时,gps图标才会消失。
EDIT3:onPause肯定被调用,因为我在其中放置了一个Log语句,但gps图标仍然存在。因此,看起来gps服务没有关闭,或者MyLocationOverlay
有disableMyLocation()
方法的错误。
这是我的清单文件和摘自我的活动:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/com.tfb"
package="com.tfb"
android:versionName="1.2.2" android:versionCode="11">
<application android:icon="@drawable/globe_search"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<activity android:name=".activity.GarageSaleMap"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
<uses-library android:name="com.google.android.maps" />
<meta-data android:value="xxxxxxxxxxx" android:name="ADMOB_PUBLISHER_ID"/>
<meta-data android:value="true" android:name="ADMOB_ALLOW_LOCATION_FOR_ADS"/>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8"/>
</manifest>
活动
private void doMain() {
mapView = (MapView) findViewById(R.id.mapview);
MapView localMapView = mapView;
localMapView.setBuiltInZoomControls(true);
final MapController controller = localMapView.getController();
localMapView.getZoomButtonsController().setAutoDismissed(false);
lastSearchButton = (ImageButton) findViewById(R.id.lastSearchButton);
lastSearchButton.setOnClickListener(new LastSearchButtonListener(this));
GeoPoint point = new GeoPoint((int)(40.8138 * 1e6), (int)(-96.6831 * 1e6));//Lincoln, NE
controller.animateTo(point);
controller.setZoom(13);
pushPinItemizedOverlay = getPushPinOverlay();
localMapView.getOverlays().add(pushPinItemizedOverlay);
new PopulateMapTask(this).execute();
locationOverlay = new FixedMyLocationOverlay(this, localMapView);
localMapView.getOverlays().add(locationOverlay);
}
@Override
protected void onPause() {
locationOverlay.disableMyLocation();
super.onPause();
}
@Override
protected void onResume() {
locationOverlay.enableMyLocation();
super.onResume();
}
非常感谢任何帮助。
答案 0 :(得分:1)
我不是肯定的,但我认为这可能来自我正在使用的admob广告插件。如果我启动我的应用程序,然后立即回家,gps图标不会消失。但是,如果我让应用程序运行一段时间并稍后返回并回家,则图标会消失。也许admob插件(我是允许获取位置数据)阻止gps关闭,直到它获得gps超时或其他东西(我只在没有卫星可用的内部测试)。
我不确定何时会有时间,但我必须通过删除admob插件进行测试才能看到,但也许这会在此期间帮助其他人。
EDIT1 :更多信息,我发现如果gps图标闪烁,它仍然试图锁定某个位置。这是当我退出应用程序时,我的gps指示器不会消失。但是,如果图标稳定(表示位置锁定),则退出应用程序时图标会消失。似乎是超时问题。 (我现在没有一个单位来测试admob假设。)
答案 1 :(得分:0)
然而,当我点击主页键或后退键进入主屏幕时,GPS会保持运行状态栏顶部带有gps图标。
如果这是在模拟器上,那么模拟器就会出现问题。一旦出现GPS状态图标,它似乎永远不会消失。