我想做这样的事情:
- 当我的应用程序启动时,我想启动一个服务,它应该检查我的位置
- 当应用程序转到后台我想停止服务
我有两个主要问题:
1.如何检测我的应用程序是否进入后台?我哈弗几个活动,我尝试在我的MainActivity中覆盖onPause,但当我启动其他活动时也会调用onPause。
1.这个问题更重要:我的位置检查服务应该是什么样的?我尝试了几种方法,但没有成功。
我的服务看起来像这样,它不工作。我应该改变什么才能让它工作?
package com.pivoscore.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
public class LocationService extends Service {
private LocationListener locationListener;
@Override
public IBinder onBind(final Intent intent) {
return null;
}
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
final LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
this.locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 0, this.locationListener);
}
private static class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(final Location location) {
}
@Override
public void onProviderDisabled(final String provider) {
}
@Override
public void onProviderEnabled(final String provider) {
}
@Override
public void onStatusChanged(final String provider, final int status, final Bundle extras) {
}
}
}
2条答案
按热度按时间oalqel3c1#
1.应用程序不是Android中的可视组件。它分为活动,每个活动在可见时运行,否则暂停和销毁。因此,不存在整个应用程序进入后台的概念,活动根据其单独的可见性被暂停和恢复,并且在这件事上完全独立于其他活动。
1.您的服务应在位置管理器的
onCreate()
中注册,并在onDestroy()
中取消注册。在onBind()
中,它将返回一个Messenger
对象。在onLocationChanged()
中,它应该通过共享的Messenger
发送消息。不需要使用START_STICKY
,因为您不希望服务一直运行。onStart()
中的bindService()
,服务将启动(如果尚未启动),Activity将从服务中获取Messenger
。此外,Activity应该从其onStop()
调用unbindService()
。服务将在没有绑定任何内容时自动停止。1.如果你需要在应用程序(任务)级别执行第3点中的内容,实现
Application
类,并使用它的onCreate()
和onTerminate()
。应用程序类不像活动那样暂停或停止。j7dteeu82#
试试这个代码..通过使用此选项,您可以查看您的应用程序是在前台还是后台。希望这对你有帮助。