2010-09-29 75 views
1

由于某种原因,当我的应用程序放入后台时,onpause方法并不总是被调用。无论是那个还是MyLocationOverlay都没有正确禁用。activity.on不总是被调用

我的应用程序使用谷歌地图和MyLocationOverlay。当启动应用程序时,我在onResume方法中调用MyLocationOverlay.enableMyLocation()。在方法中,我呼叫MyLocationOverlay.disableMyLocation()。但是,当我按Home键或后退键进入主屏幕时,GPS会按照带状态栏顶部所示的gps图标继续运行。

编辑:它不能在模拟器或手机上工作。

编辑2:当我使用高级任务杀手杀死它时,gps图标只会消失。

EDIT3:在onPause肯定是被称为我把日志语句,但在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(); 
} 

任何帮助将不胜感激。

回答

1

我不是很积极,但我想这可能来自我正在使用的admob广告插件。如果我启动我的应用程序,然后立即打到家里,gps图标不会消失。但是,如果我稍后离开应用程序并稍后再回到家中,图标确实会消失。也许admob插件(我允许获取位置数据)阻止gps关机,直到它获得GPS超时或什么(我只在内部没有卫星可用的地方进行过测试)。

不知道什么时候有时间我会,但我会通过移除AdMob插件看到测试,但也许这将帮助别人的同时别人。

EDIT1:更多信息,我发现如果GPS图标闪烁,它仍然试图锁定到一个位置。这是当我退出应用程序时,我的gps指示灯不会消失。但是,如果图标稳定(指示位置上的锁定),则在退出应用程序时它将消失。似乎是超时问题。 (我现在没有一个单元来测试admob假设)。

+0

让我们知道这是否有效,或者如果您找到解决方案。我有同样的问题,我不使用Admob。 – ShadowGod 2010-10-01 07:49:13

+0

我接受这个答案来代替更好的答案。如果有人想出更明确的答案,我会重新评估。 – Nemi 2010-10-04 16:38:16

0

但是,当我按Home键或返回键进入主屏幕时,GPS会一直运行,如状态栏顶部所示,带有gps图标。

如果这是在仿真器上,那是模拟器的问题。一旦GPS状态图标出现,它似乎永远不会消失。

+0

我张贴了类似的问题,一会儿前,GPS图标从未消失,它不仅在模拟器上 - http://stackoverflow.com/questions/3744498/gps-icon-wont-disappear-when-活动被破坏 – ShadowGod 2010-09-29 18:51:40

+0

看我的编辑。它不适用于仿真器或手机 – Nemi 2010-09-29 20:52:43

相关问题