Android gps定位
16lz
2021-01-23
我去,好久对没来os来了编辑器都有三种风格了,这愉快的周末即将开始,下午了,来个gps是如何定位的,Android版本的,ios的请绕走。
首先还是需要引入你的权限,在AndroidManifest.xml里加上这几个<!--网络精确定位gps,权限不懂的Google或者看API--><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
权限都加上了,看看我的activity
package*********import***********publicclassLocationActivityextendsActivity{privateStringTAG="LocationActivity";privateLocationManagerlocationManager;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);locationManager=(LocationManager)getSystemService(LOCATION_SERVICE);}@OverrideprotectedvoidonResume(){super.onResume();initData();//init}privatevoidinitData(){if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){Log.i(TAG,"gpsclose");Intentintent=newIntent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);startActivityForResult(intent,0);return;}else{Log.i(TAG,"gpsopen");}StringbestProvider=locationManager.getBestProvider(getCriteria(),true);Locationlocation=locationManager.getLastKnownLocation(bestProvider);updateView(location);/*1000毫秒0米偏移量,更新,定位方式我用的NETWORK_PROVIDER,也可以用GPS_PROVIDER,只是gps在室内好像定不了*/locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000,0,locationListener);}privatevoidupdateGps(Locationlocation){if(location!=null){Log.i(TAG,"设备位置信息,经度:"+String.valueOf(location.getLongitude())+"纬度:"+String.valueOf(location.getLatitude())+"海拔:"+String.valueOf(location.getAltitude()));}else{Log.i(TAG,"暂时未获取到位置");}}privateCriteriagetCriteria(){Criteriacriteria=newCriteria();/*设置定位精确度Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细,此处注意,如果想粗略的定位要去AndroidManifest.xml中加上粗略的权限,*/criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置是否要求速度criteria.setSpeedRequired(false);//设置是否允许运营商收费criteria.setCostAllowed(false);//设置是否需要方位信息criteria.setBearingRequired(false);//设置是否需要海拔信息criteria.setAltitudeRequired(true);//设置对电源的需求criteria.setPowerRequirement(Criteria.POWER_LOW);returncriteria;}privateLocationListenerlocationListener=newLocationListener(){/***位置信息变化时触发*/publicvoidonLocationChanged(Locationlocation){updateGps(location);}/***GPS状态变化时触发*/publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){switch(status){//GPS状态为可见时caseLocationProvider.AVAILABLE:Log.i(TAG,"当前GPS状态为可见状态");break;//GPS状态为服务区外时caseLocationProvider.OUT_OF_SERVICE:Log.i(TAG,"当前GPS状态为服务区外状态");break;//GPS状态为暂停服务时caseLocationProvider.TEMPORARILY_UNAVAILABLE:Log.i(TAG,"当前GPS状态为暂停服务状态");break;}}/***GPS开启时触发*/publicvoidonProviderEnabled(Stringprovider){Locationlocation=locationManager.getLastKnownLocation(provider);updateGps(location);}/***GPS禁用时触发*/publicvoidonProviderDisabled(Stringprovider){updateGps(null);}};privateGpsStatus.Listenerlistener=newGpsStatus.Listener(){@OverridepublicvoidonGpsStatusChanged(intevent){switch(event){caseGpsStatus.GPS_EVENT_FIRST_FIX:Log.i(TAG,"第一次定位");break;caseGpsStatus.GPS_EVENT_SATELLITE_STATUS:Log.i(TAG,"卫星状态改变");GpsStatusgpsStatus=locationManager.getGpsStatus(null);intmaxSatellites=gpsStatus.getMaxSatellites();Iterator<GpsSatellite>iters=gpsStatus.getSatellites().iterator();intcount=0;while(iters.hasNext()&&count<=maxSatellites){GpsSatellites=iters.next();count++;}break;caseGpsStatus.GPS_EVENT_STARTED:Log.i(TAG,"定位启动");break;caseGpsStatus.GPS_EVENT_STOPPED:Log.i(TAG,"定位结束");break;}}};}
复制到你类中,有需要import的全部导入即可,运行下查看是否可以获取gps,亲测三星是可以的,比较仓促,不足之处留言。
更多相关文章
- android selinux权限, Permission denied, 访问限制
- [Android--Structure]App系统权限permission与安全security
- Android 沉浸式状态栏实现, 在Activity和Fragment中
- Android中的停止状态
- Android判断网络状态方法详解
- 【摘录】Android 2.3状态栏中添加menu,home和back快捷键
- Android编程 获取网络连接状态 及调用网络配置界面