Android开发————如何在锁屏之后还能获取GPS信息

<span style="font-family: Simsun; background-color: rgb(244, 251, 244);">在配备Android系统的手机中,一般都配备了GPS设备。Android为我们获取GPS数据提供了很好的接口。本文来说一下如何使用Android获取GPS的经纬度。</span>
1 从Service继承一个类。
2 创建startService()方法。
3 创建endService()方法 重载onCreate方法和onDestroy方法,并在这两个方法里面来调用startService以及endService。
4 在startService中,通过getSystemService方法获取Context.LOCATION_SERVICE。
5 基于LocationListener实现一个新类。默认将重载四个方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。对于onLocationChanged方法是我们更新最新的GPS数据的方法。一般我们的操作都只需要在这里进行处理。
6 调用LocationManager的requestLocationUpdates方法,来定期触发获取GPS数据即可。在onLocationChanged函数里面可以实现我们对得到的经纬度的最终操作。
7 最后在我们的Activity里面通过按钮来启动Service,停止Service。

示意代码如下:

package com.offbye.gpsservice;
import android.app.service;
import android.content.context;
import android.content.intent;
import android.location.locationlistener;
import android.location.locationmanager;
import android.os.binder;
import android.os.ibinder;
import android.util.log;
public class gpsservice extends service {
    // 2000ms
    private static final long mintime = 2000;
    // 最小变更距离 10m
    private static final float mindistance = 10;
    string tag = this.tostring();
    private locationmanager locationmanager;
    private locationlistener locationlistener;
    private final ibinder mbinder = new gpsservicebinder();
    public void startservice() {
        locationmanager = (locationmanager) getsystemservice(context.location_service);
        locationlistener = new gpsservicelistener();
        locationmanager.requestlocationupdates(locationmanager.gps_provider, mintime, mindistance,
                locationlistener);
    }
    public void endservice() {
        if (locationmanager != null && locationlistener != null) {
            locationmanager.removeupdates(locationlistener);
        }
    }
    @override
    public ibinder onbind(intent arg0) {
        // todo auto-generated method stub
        return mbinder;
    }
    @override
    public void oncreate() {
        //
        startservice();
        log.v(tag, "gpsservice started.");
    }
    @override
    public void ondestroy() {
        endservice();
        log.v(tag, "gpsservice ended.");
    }
    public class gpsservicebinder extends binder {
        gpsservice getservice() {
            return gpsservice.this;
        }
    }
}


GPSServiceListener的实现

package com.offbye.gpsservice;
import java.text.dateformat;
import java.text.simpledateformat;
import java.util.calendar;
import java.util.gregoriancalendar;
import java.util.timezone;
import android.location.location;
import android.location.locationlistener;
import android.location.locationprovider;
import android.os.bundle;
import android.util.log;
import android.widget.toast;
public class gpsservicelistener implements locationlistener {
    private static final string tag = "gpsservicelistener";
    private static final float minaccuracymeters = 35;
    private static final string hosturl = "http://doandroid.info/gpsservice/position.php?";
    private static final string user = "huzhangyou";
    private static final string pass = "123456";
    private static final int duration = 10;
    private final dateformat timestampformat = new simpledateformat("yyyymmddhhmmss");
    public int gpscurrentstatus;
    @override
    public void onlocationchanged(location location) {
        // todo auto-generated method stub
        if (location != null) {
            if (location.hasaccuracy() && location.getaccuracy() <= minaccuracymeters) {
                // 获取时间参数,将时间一并post到服务器端
                gregoriancalendar greg = new gregoriancalendar();
                timezone tz = greg.gettimezone();
                int offset = tz.getoffset(system.currenttimemillis());
                greg.add(calendar.second, (offset / 1000) * -1);
                stringbuffer strbuffer = new stringbuffer();
                strbuffer.append(hosturl);
                strbuffer.append("user=");
                strbuffer.append(user);
                strbuffer.append("&pass=");
                strbuffer.append(pass);
                strbuffer.append("&latitude=");
                strbuffer.append(location.getlatitude());
                strbuffer.append("&longitude=");
                strbuffer.append(location.getlongitude());
                strbuffer.append("&time=");
                strbuffer.append(timestampformat.format(greg.gettime()));
                strbuffer.append("&speed=");
                strbuffer.append(location.hasspeed());
                doget(strbuffer.tostring());
                log.v(tag, strbuffer.tostring());
            }
        }
    }
    // 将数据通过get的方式发送到服务器,服务器可以根据这个数据进行跟踪用户的行走状态
    private void doget(string string) {
        // todo auto-generated method stub
        //
    }
    @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
        gpscurrentstatus = status;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值