ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:46.38KB ,
资源ID:11739544      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11739544.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android Service获取当前位置GPS+基站.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android Service获取当前位置GPS+基站.docx

1、Android Service获取当前位置GPS+基站Android Service获取当前位置(GPS+基站)需求详情:1)、Service中每隔1秒执行一次定位操作(GPS+基站)2)、定位的结果实时显示在界面上(要求得到经度、纬度)技术支持:1)、获取经纬度通过GPS+基站获取经纬度,先通过GPS来获取,如果为空改用基站进行获取GPS+基站(基站获取支持联通、电信、移动)。2)、实时获取经纬度为了达到实时获取经纬度,需在后台启动获取经纬度的Service,然后把经纬度数据通过广播发送出去,在需要的地方进行广播注册(比如在Activity中注册广播,显示在界面中)涉及到Service+Br

2、oadcastReceiver+Activity+Thread等知识点。备注:本文注重实践,如有看不懂的,先去巩固下知识点,可以去看看我前面写的几篇文章。1、CellInfo实体类基站信息package com.ljq.activity;/* 基站信息* * author jiqinlin* */public class CellInfo /* 基站id,用来找到基站的位置 */private int cellId;/* 移动国家码,共3位,中国为460,即imsi前3位 */private String mobileCountryCode=460;/* 移动网络码,共2位,在中国,移动的代码

3、为00和02,联通的代码为01,电信的代码为03,即imsi第45位 */private String mobileNetworkCode=0;/* 地区区域码 */private int locationAreaCode;/* 信号类型选 gsm|cdma|wcdma */private String radioType=;public CellInfo() public int getCellId() return cellId;public void setCellId(int cellId) this.cellId = cellId;public String getMobileCou

4、ntryCode() return mobileCountryCode;public void setMobileCountryCode(String mobileCountryCode) this.mobileCountryCode = mobileCountryCode;public String getMobileNetworkCode() return mobileNetworkCode;public void setMobileNetworkCode(String mobileNetworkCode) this.mobileNetworkCode = mobileNetworkCod

5、e;public int getLocationAreaCode() return locationAreaCode;public void setLocationAreaCode(int locationAreaCode) this.locationAreaCode = locationAreaCode;public String getRadioType() return radioType;public void setRadioType(String radioType) this.radioType = radioType;2、Gps类Gps封装类,用来获取经纬度package co

6、m.ljq.activity;import android.content.Context;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;public class Gpsprivate Location location = null;private LocationManager locationM

7、anager = null;private Context context = null;/* 初始化 * * param ctx*/public Gps(Context ctx) context=ctx;locationManager=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE);location = locationManager.getLastKnownLocation(getProvider();locationManager.requestLocationUpdates(LocationMana

8、ger.GPS_PROVIDER, 2000, 10, locationListener);/ 获取Location Providerprivate String getProvider() / 构建位置查询条件Criteria criteria = new Criteria();/ 查询精度:高criteria.setAccuracy(Criteria.ACCURACY_FINE);/ 是否查询海拨:否criteria.setAltitudeRequired(false);/ 是否查询方位角 : 否criteria.setBearingRequired(false);/ 是否允许付费:是cr

9、iteria.setCostAllowed(true);/ 电量要求:低criteria.setPowerRequirement(Criteria.POWER_LOW);/ 返回最合适的符合条件的provider,第2个参数为true说明 , 如果只有一个provider是有效的,则返回当前providerreturn locationManager.getBestProvider(criteria, true);private LocationListener locationListener = new LocationListener() / 位置发生改变后调用public void o

10、nLocationChanged(Location l) if(l!=null)location=l;/ provider 被用户关闭后调用public void onProviderDisabled(String provider) location=null;/ provider 被用户开启后调用public void onProviderEnabled(String provider) Location l = locationManager.getLastKnownLocation(provider);if(l!=null)location=l;/ provider 状态变化时调用pu

11、blic void onStatusChanged(String provider, int status, Bundle extras) ;public Location getLocation()return location;public void closeLocation()if(locationManager!=null)if(locationListener!=null)locationManager.removeUpdates(locationListener);locationListener=null;locationManager=null;3、GpsService服务类

12、package com.ljq.activity;import java.util.ArrayList;import android.app.Service;import android.content.Intent;import android.location.Location;import android.os.IBinder;import android.util.Log;public class GpsService extends Service ArrayList cellIds = null;private Gps gps=null;private boolean thread

13、Disable=false; private final static String TAG=GpsService.class.getSimpleName();Overridepublic void onCreate() super.onCreate();gps=new Gps(GpsService.this);cellIds=UtilTool.init(GpsService.this);new Thread(new Runnable()Overridepublic void run() while (!threadDisable) try Thread.sleep(1000); catch

14、(InterruptedException e) e.printStackTrace();if(gps!=null) /当结束服务时gps为空/获取经纬度Location location=gps.getLocation();/如果gps无法获取经纬度,改用基站定位获取if(location=null)Log.v(TAG, gps location null); /2.根据基站信息获取经纬度try location = UtilTool.callGear(GpsService.this, cellIds); catch (Exception e) location=null;e.printSt

15、ackTrace();if(location=null)Log.v(TAG, cell location null); /发送广播Intent intent=new Intent();intent.putExtra(lat, location=null?:location.getLatitude()+); intent.putExtra(lon, location=null?:location.getLongitude()+); intent.setAction(com.ljq.activity.GpsService); sendBroadcast(intent);).start();Over

16、ridepublic void onDestroy() threadDisable=true;if(cellIds!=null&cellIds.size()0)cellIds=null;if(gps!=null)gps.closeLocation();gps=null;super.onDestroy();Overridepublic IBinder onBind(Intent arg0) return null;4、GpsActivity在界面上实时显示经纬度数据package com.ljq.activity;import android.app.Activity;import androi

17、d.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.location.Location;import android.location.LocationManager;import android.os.Bundle;import android.util.Log;import android.widget.EditText;import android.widget.

18、Toast;public class GpsActivity extends Activity private Double homeLat=26.0673834d; /宿舍纬度private Double homeLon=119.3119936d; /宿舍经度private EditText editText = null;private MyReceiver receiver=null; private final static String TAG=GpsActivity.class.getSimpleName();Overridepublic void onCreate(Bundle

19、savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);editText=(EditText)findViewById(R.id.editText);/判断GPS是否可用Log.i(TAG, UtilTool.isGpsEnabled(LocationManager)getSystemService(Context.LOCATION_SERVICE)+);if(!UtilTool.isGpsEnabled(LocationManager)getSystemService(Conte

20、xt.LOCATION_SERVICE)Toast.makeText(this, GSP当前已禁用,请在您的系统设置屏幕启动。, Toast.LENGTH_LONG).show();Intent callGPSSettingIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(callGPSSettingIntent);return; /启动服务startService(new Intent(this, GpsService.class);/注册广播receiv

21、er=new MyReceiver();IntentFilter filter=new IntentFilter();filter.addAction(com.ljq.activity.GpsService);registerReceiver(receiver, filter);/获取广播数据private class MyReceiver extends BroadcastReceiverOverridepublic void onReceive(Context context, Intent intent) Bundle bundle=intent.getExtras(); String

22、lon=bundle.getString(lon); String lat=bundle.getString(lat); if(lon!=null&!.equals(lon)&lat!=null&!.equals(lat)double distance=getDistance(Double.parseDouble(lat), Double.parseDouble(lon), homeLat, homeLon);editText.setText(目前经纬度n经度:+lon+n纬度:+lat+n离宿舍距离:+java.lang.Math.abs(distance);elseeditText.set

23、Text(目前经纬度n经度:+lon+n纬度:+lat);Overrideprotected void onDestroy() /注销服务unregisterReceiver(receiver);/结束服务,如果想让服务一直运行就注销此句stopService(new Intent(this, GpsService.class);super.onDestroy();/* 把经纬度换算成距离* * param lat1 开始纬度* param lon1 开始经度* param lat2 结束纬度* param lon2 结束经度* return*/private double getDistan

24、ce(double lat1, double lon1, double lat2, double lon2) float results = new float1;Location.distanceBetween(lat1, lon1, lat2, lon2, results);return results0; 5、UtilTool工具类package com.ljq.activity;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io

25、.OutputStream;import java.io.UnsupportedEncodingException;import .HttpURLConnection;import .MalformedURLException;import .ProtocolException;import .URL;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import java.util.Locale;import org.apache.http.client.ClientProtocolExcep

26、tion;import org.json.JSONException;import org.json.JSONObject;import android.content.Context;import android.location.Location;import android.location.LocationManager;import android.telephony.NeighboringCellInfo;import android.telephony.TelephonyManager;import android.telephony.cdma.CdmaCellLocation;

27、import android.telephony.gsm.GsmCellLocation;import android.util.Log;import android.widget.Toast;public class UtilTool public static boolean isGpsEnabled(LocationManager locationManager) boolean isOpenGPS = locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER);boolean isOpenNetwork = locationManager.isProviderEnabled(android.location.LocationManager.NETWORK_PROVIDER);if (isOpenGPS | isOpenNetwork) return true;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1