第一款Android应用程序使用GPS定位和地图,但电池电量不足

第一款Android应用程序使用GPS定位和地图,但电池电量不足,android,google-maps,gps,Android,Google Maps,Gps,我刚刚开始开发我的第一个Android应用程序,现在一切正常。我已经设法让应用程序在地图上找到我的当前位置,并将蓝色圆圈放在那里。我可以看到通知栏中的卫星图标正在工作(卫星天线发出光线) 我对android手机非常陌生,但在使用完我的应用程序后,我只需使用back键或home键退出它,这两个键都可以正常工作,但我注意到卫星图标仍在工作。一小时后回到我的手机上,GPS仍在运行。这当然会使手机电池很快耗尽 我认为与iPhone不同的是,Android应用程序可以在后台运行,并且仍然在运行。当我的应用

我刚刚开始开发我的第一个Android应用程序,现在一切正常。我已经设法让应用程序在地图上找到我的当前位置,并将蓝色圆圈放在那里。我可以看到通知栏中的卫星图标正在工作(卫星天线发出光线)

我对android手机非常陌生,但在使用完我的应用程序后,我只需使用back键或home键退出它,这两个键都可以正常工作,但我注意到卫星图标仍在工作。一小时后回到我的手机上,GPS仍在运行。这当然会使手机电池很快耗尽

我认为与iPhone不同的是,Android应用程序可以在后台运行,并且仍然在运行。当我的应用程序不再在地图视图中时,如何让它停止使用GPS

以下是我迄今为止所做工作的一个例子:

//find and initialise map view
private void initMapView() {
    map = (MapView) findViewById(R.id.map);
    controller = map.getController();
    map.setSatellite(false);
    map.setBuiltInZoomControls(true);
}

//start tracking the position on the map
private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
    overlay.enableMyLocation();
    //overlay.enableCompass(); does not work in emulator
    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            //zoom in to current location
            controller.setZoom(8);
            controller.animateTo(overlay.getMyLocation());
        }
    });
    map.getOverlays().add(overlay);
}
离开地图视图时是否需要禁用某些功能?如果是,怎么做


干杯伙计们

你们可能应该看一下。简言之,你的假设是正确的:当你离开应用程序时,Android并不仅仅会杀死它

您必须实现onPause()方法和。也许还可以删除mapview,但我认为这对电池寿命没有多大影响

另外,您应该将移动到onResume()方法中。这是必要的,以便在应用程序重新进入视图时再次启用GPS


onPause()、onResume()、onCreate()等方法会在适当的时候被android自己调用。

您可能应该看看。简言之,你的假设是正确的:当你离开应用程序时,Android并不仅仅会杀死它

您必须实现onPause()方法和。也许还可以删除mapview,但我认为这对电池寿命没有多大影响

另外,您应该将移动到onResume()方法中。这是必要的,以便在应用程序重新进入视图时再次启用GPS

安卓会在适当的时候调用onPause()、onResume()、onCreate()等方法。

Daniel

在maps overlay API中,有一些函数调用将为您注册和注销侦听器

您已经在调用enableMyLocation();现在需要调用overlay.disablelyLocation()

在暂停中

丹尼尔

在maps overlay API中,有一些函数调用将为您注册和注销侦听器

您已经在调用enableMyLocation();现在需要调用overlay.disablelyLocation()


在暂停中

谢谢,这是一个非常有用的回答。我从一本书开始的教程似乎遗漏了这些重要的部分。我是否应该在onCreate()中同时在onResume()中使用enableMyLocation,以便在您第一次启动应用程序时可以使用它?或者它会在Resume上运行吗?还是从onCreate调用onResume?不管怎样,它都会在Resume上运行,如果应用程序刚刚启动,也会在Resume上运行。在我上面的第一个链接中,再往下看一点图片。我已经把它打印出来并钉在我的TFT旁边;-)谢谢,这是一个非常有用的回答。我从一本书开始的教程似乎遗漏了这些重要的部分。我是否应该在onCreate()中同时在onResume()中使用enableMyLocation,以便在您第一次启动应用程序时可以使用它?或者它会在Resume上运行吗?还是从onCreate调用onResume?不管怎样,它都会在Resume上运行,如果应用程序刚刚启动,也会在Resume上运行。在我上面的第一个链接中,再往下看一点图片。我已经把它打印出来并钉在我的TFT旁边;-)