执行后停止服务

时间:2014-02-07 10:49:50

标签: android service locationlistener

您好我正在编写程序,使用Alarmmanager每隔5分钟获取用户当前的经纬度并将值存储在共享偏好中。我想运行此搜索背景,因此我使用service.I想要获取后获取服务和经度,以避免电池耗尽。这是我的代码

CurrentLocation.java

import com.google.android.gms.maps.model.LatLng;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;


public class CurrentLocation extends Service implements LocationListener {

    private Context mcontext;
    SharedPreferences shprefs;


    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        this.mcontext=this;
        getlocation();

    }
    private void getlocation() {
        // TODO Auto-generated method stub
        Log.i("evvterer", "mnbj");
        LocationManager locationManager = (LocationManager) mcontext.getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub

        return null;
    }
    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        shprefs=PreferenceManager.getDefaultSharedPreferences(CurrentLocation.this);


        double latitude=location.getLatitude();
        Editor edit=shprefs.edit();
        edit.putString("Ltd", ""+latitude);
        edit.commit();

        double longitude=location.getLongitude();
        Editor edits=shprefs.edit();
        edits.putString("Lngtd", ""+longitude);
        edits.commit();
        LatLng loca=new LatLng(latitude,longitude);

    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }   
}

请帮帮我 提前致谢

2 个答案:

答案 0 :(得分:0)

使用广播接收器代替服务,因为广播接收器意图在您的条件满足时触发,因此使用广播每5分钟取出用户当前经度和经度。:)来自广播接收器,您的电池不会因为服务而降低很多

答案 1 :(得分:0)

当您使用onBind中的返回null时,您可能正在使用startService()来启动CurrentLocation服务。 因此,当您完成CurrentLocation服务后,请简单地调用stopService (Intent service)

但是如果你已经使用了bindService,那么你必须使用unBindService()。

要在准确的时间停止服务,您可以在onLocationChanged()结束时调用活动中的方法,然后从该方法停止服务。

或者向与您的活动相关联的处理程序发送消息以停止服务。

并添加您的代码以启动该服务,以便它可以帮助其他人回答您的问题。