GSPUtil

来源:互联网 发布:灰色模型软件 编辑:程序博客网 时间:2024/05/22 09:02
package org.join.weather.util;import java.util.List;import org.join.weather.WeatherActivity;import org.join.weather.WeatherActivity.OnActivityResumeAndPauseListener;import android.app.AlertDialog;import android.content.Context;import android.content.Intent;import android.location.Address;import android.location.Criteria;import android.location.Geocoder;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.preference.PreferenceManager.OnActivityResultListener;import android.provider.Settings;import android.util.Log;import android.widget.Toast;public class GPSUtil implements OnActivityResultListener,OnActivityResumeAndPauseListener {// WeatherActivity对象private WeatherActivity weatherActivity;// LocationManager对象private LocationManager locationManager;// Location对象private Location location;// 当前位置提供者private String provider;// 时间(秒)private long minTime = 60 * 1000;// 距离(米)private float minDistance = 500;// 定位方式private int mode = 1;// 位置监听接口private LocationListener mLocationListener = new LocationListener() {@Overridepublic void onLocationChanged(final Location loc) {// 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发Log.v("onLocationChanged", "=onLocationChanged");if (loc != null) {location = loc;showLocationInfo(loc);} else {Toast.makeText(weatherActivity, "当前位置不可定位!", Toast.LENGTH_SHORT).show();// 注销监听事件// locationManager.removeUpdates(mLocationListener);}}@Overridepublic void onProviderDisabled(String provider) {// Provider被disable时触发此函数,比如GPS被关闭Log.v("onProviderDisabled", "=onProviderDisabled");}@Overridepublic void onProviderEnabled(String provider) {// Provider被enable时触发此函数,比如GPS被打开Log.v("onProviderEnabled", "=onProviderEnabled");}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数Log.v("onStatusChanged", "=onStatusChanged");}};// 超时注销服务private Handler myHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (null == location) {// 提示信息Toast.makeText(weatherActivity, "当前位置不可定位!", Toast.LENGTH_SHORT).show();}// 注销监听事件locationManager.removeUpdates(mLocationListener);}};public GPSUtil(WeatherActivity weatherActivity, int mode) {this.weatherActivity = weatherActivity;weatherActivity.setOnActivityResultListener(this);weatherActivity.setOnResumeAndPauseListener(this);this.mode = mode;// 获得LocationManager服务locationManager = (LocationManager) weatherActivity.getSystemService(Context.LOCATION_SERVICE);if (openGPSSettings()) {setLocationServer(mode);} else {Toast.makeText(weatherActivity, "请开启GPS!", Toast.LENGTH_SHORT).show();Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);// 此为设置完成后返回到获取界面weatherActivity.startActivityForResult(intent, 0);}}public GPSUtil(WeatherActivity weatherActivity, int mode, long minTime,float minDistance) {this(weatherActivity, mode);this.minTime = minTime;this.minDistance = minDistance;}// 判断GPS模块是否存在或者是开启private boolean openGPSSettings() {if (locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {return true;}return false;}// 更新当前位置信息(如果使用GPS,需要保证在室外,并且没有大建筑物遮挡,如果使用网络定位,要保证网络通畅)public void setLocationServer(int mode) {Toast.makeText(weatherActivity, "正在定位!", Toast.LENGTH_SHORT).show();switch (mode) {case 1: {// GPS定位if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {provider = LocationManager.GPS_PROVIDER;location = locationManager.getLastKnownLocation(provider);// 设置监听器,自动更新的最小时间为间隔N秒或最小位移变化超过N米locationManager.requestLocationUpdates(provider, minTime,minDistance, mLocationListener);Log.v("GPS定位", "GPS定位!");} else {Log.v("GPS定位", "未提供GPS定位功能!");}break;}case 2: {// NETWORK定位provider = LocationManager.NETWORK_PROVIDER;location = locationManager.getLastKnownLocation(provider);// 设置监听器,自动更新的最小时间为间隔N秒或最小位移变化超过N米locationManager.requestLocationUpdates(provider, minTime,minDistance, mLocationListener);Log.v("NETWORK定位", "NETWORK定位!");break;}case 3: {// 查询符合条件的Location Provider来定位// 获得Criteria对象(指定条件参数)Criteria criteria = new Criteria();// 获得最好的单位效果criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);criteria.setCostAllowed(false);// 使用省电模式criteria.setPowerRequirement(Criteria.POWER_LOW);// 获得当前位置的提供者provider = locationManager.getBestProvider(criteria, true);// 获得当前位置location = locationManager.getLastKnownLocation(provider);if (null != provider) {// 设置监听器,自动更新的最小时间为间隔N秒或最小位移变化超过N米locationManager.requestLocationUpdates(provider, minTime,minDistance, mLocationListener);} else {Log.v("provider", "null == provider");}Log.v("最优定位", provider);break;}}if (null != location) {showLocationInfo(location);}// 延迟10秒myHandler.sendEmptyMessageDelayed(0, 10 * 1000);}// 显示定位信息private void showLocationInfo(Location loc) {String msg = "";try {msg = "经度:" + location.getLongitude() + "\n";msg += "纬度:" + location.getLatitude() + "\n";Geocoder gc = new Geocoder(weatherActivity);List<Address> addresses = gc.getFromLocation(location.getLatitude(), location.getLongitude(), 1);// 相关信息if (addresses.size() > 0) {msg += "AddressLine:" + addresses.get(0).getAddressLine(0)+ "\n";msg += "CountryName:" + addresses.get(0).getCountryName()+ "\n";msg += "Locality:" + addresses.get(0).getLocality() + "\n";msg += "FeatureName:" + addresses.get(0).getFeatureName();}} catch (Exception e) {msg = e.getMessage();}new AlertDialog.Builder(weatherActivity).setMessage(msg).setPositiveButton("确定", null).show();}@Overridepublic boolean onActivityResult(int requestCode, int resultCode, Intent data) {// 从设置GPS的Activity返回时if (0 == requestCode) {if (openGPSSettings()) {setLocationServer(mode);} else {Toast.makeText(weatherActivity, "GPS仍未开启!", Toast.LENGTH_SHORT).show();}}return false;}// 在Activity恢复活动时,响应位置更新@Overridepublic void onResume() {if (null != provider) {locationManager.requestLocationUpdates(provider, minTime,minDistance, mLocationListener);}}// 在Activity暂停活动时,取消位置更新@Overridepublic void onPause() {if (null != locationManager) {locationManager.removeUpdates(mLocationListener);}}}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 眼镜带了往下掉怎么办 孩子捅别的孩子眼睛了怎么办 眼睛不小心捅伤怎么办 我的爸爸是小偷怎么办 违停罚款忘记交怎么办 顺风车无人接单怎么办 来例假腰特别疼怎么办 把人撞死了全责怎么办 朝鲜与美合作对付中国怎么办 申请美国大学gpa不够怎么办 武装突袭3有地雷怎么办 辐射4狗肉跟丢了怎么办 洛奇英雄传死绑S怎么办 在老挝遇到坏人带枪怎么办 买了sd卡卡槽塞不下怎么办 现役军人家庭被邻居欺服怎么办 地铁买票买多了怎么办 免税店买的东西转机怎么办 绿能电动车坏了怎么办? 永久单车收不到验证码怎么办 24速山地车档乱了怎么办 新电瓶车被偷了怎么办 汽车前风挡玻璃砸出洞怎么办 凯迪拉克xt5钥匙掉了怎么办 凯迪拉克xt5媒体不好用怎么办 晒黄的白鞋怎么办 白鞋子被晒黄了怎么办? 耐克空军一号白色发黄怎么办 空军一号破皮了怎么办 匡威鞋帆布破了怎么办 脚腕起疙瘩很痒怎么办 跑步后脚踝微疼怎么办 跑步跑得脚疼怎么办 nike air 鞋头脱胶怎么办 耐克空军一号磨脚怎么办 白鞋刷完变黄了怎么办 乔丹气垫坏了怎么办 气垫鞋气垫坏了怎么办 建行u盾忘记密码怎么办 工商银行u盾忘记密码怎么办 民生银行不给u盾怎么办