我去,好久对没来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,亲测三星是可以的,比较仓促,不足之处留言。

更多相关文章

  1. android selinux权限, Permission denied, 访问限制
  2. [Android--Structure]App系统权限permission与安全security
  3. Android 沉浸式状态栏实现, 在Activity和Fragment中
  4. Android中的停止状态
  5. Android判断网络状态方法详解
  6. 【摘录】Android 2.3状态栏中添加menu,home和back快捷键
  7. Android编程 获取网络连接状态 及调用网络配置界面

随机推荐

  1. Android(安卓)menu关闭应用程序
  2. 彻底解决 INSTALL_FAILED_TEST_ONLY安装
  3. 集成Android(安卓)SlidingMenu(SlideMenu)
  4. Android入门:深入学习理解 Handler Handl
  5. Android(安卓)基于DataBinding的通用Recy
  6. MediaPlayer MediaController
  7. 安卓学习随笔 -- 自定义标题栏
  8. Android中popuwindow中使用listview
  9. android -- 分享 二次打包植入广告
  10. Android(安卓)Paint绘制边框注意事项