Android获取手机位置的实现代码
程序员文章站
2024-03-01 19:08:10
本文实例为大家分享了android获取手机位置的方法,供大家参考,具体内容如下
1、项目src下创建...service包,然后新建gpsservice类...
本文实例为大家分享了android获取手机位置的方法,供大家参考,具体内容如下
1、项目src下创建...service包,然后新建gpsservice类
package com.zebra.mobilesafe.service; import java.io.ioexception; import java.io.inputstream; import android.app.service; import android.content.intent; import android.content.sharedpreferences; import android.content.sharedpreferences.editor; import android.location.criteria; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.os.bundle; import android.os.ibinder; import android.util.log; public class gpsservice extends service { private static final string tag = "gpsservice"; // 用到位置服务 private locationmanager lm; private mylocationlistener listener; @override public ibinder onbind(intent intent) { // todo auto-generated method stub return null; } @override public void oncreate() { // todo auto-generated method stub super.oncreate(); log.i(tag, "====进入gps=="); lm = (locationmanager) getsystemservice(location_service); // list<string> provider = lm.getallproviders(); // for(string l: provider){ // system.out.println(l); // } listener = new mylocationlistener(); // 注册监听位置服务 // 给位置提供者设置条件 criteria criteria = new criteria(); criteria.setaccuracy(criteria.accuracy_fine); // 设置参数细化: // criteria.setaccuracy(criteria.accuracy_fine);//设置为最大精度 // criteria.setaltituderequired(false);//不要求海拔信息 // criteria.setbearingrequired(false);//不要求方位信息 // criteria.setcostallowed(true);//是否允许付费 // criteria.setpowerrequirement(criteria.power_low);//对电量的要求 string proveder = lm.getbestprovider(criteria, true); lm.requestlocationupdates(proveder, 0, 0, listener); } @override public void ondestroy() { super.ondestroy(); // 取消监听位置服务 lm.removeupdates(listener); listener = null; } class mylocationlistener implements locationlistener { /** * 当位置改变的时候回调 */ @override public void onlocationchanged(location location) { string longitude = "j:" + location.getlongitude() + "\n"; string latitude = "w:" + location.getlatitude() + "\n"; string accuracy = "a" + location.getaccuracy() + "\n"; // 发短信给安全号码 // 把标准的gps坐标转换成火星坐标 // inputstream is; // try { // is = getassets().open("axisoffset.dat"); // modifyoffset offset = modifyoffset.getinstance(is); // pointdouble double1 = offset.s2c(new pointdouble(location // .getlongitude(), location.getlatitude())); // longitude ="j:" + offset.x+ "\n"; // latitude = "w:" +offset.y+ "\n"; // // } catch (ioexception e) { // // todo auto-generated catch block // e.printstacktrace(); // } catch (exception e) { // // todo auto-generated catch block // e.printstacktrace(); // } sharedpreferences sp = getsharedpreferences("config", mode_private); editor editor = sp.edit(); editor.putstring("lastlocation", longitude + latitude + accuracy); editor.commit(); } /** * 当状态发生改变的时候回调 开启--关闭 ;关闭--开启 */ @override public void onstatuschanged(string provider, int status, bundle extras) { // todo auto-generated method stub } /** * 某一个位置提供者可以使用了 */ @override public void onproviderenabled(string provider) { // todo auto-generated method stub } /** * 某一个位置提供者不可以使用了 */ @override public void onproviderdisabled(string provider) { // todo auto-generated method stub } } }
2、androidmanifest.xml添加类
注意这个是service类型,很容易出错,即<service android:name="com.zebra.mobilesafe.service.gpsservice"/>
3、添加权限
<uses-permission android:name="android.permission.access_fine_location"/> <uses-permission android:name="android.permission.access_coarse_location"/> <uses-permission android:name="android.permission.access_mock_location"/>
4、根据操作启动服务
intent i = new intent(context,gpsservice.class); context.startservice(i);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。