android6.23 locate定位服务

来源:互联网 发布:如何下载淘宝宝贝主图 编辑:程序博客网 时间:2024/05/16 23:33

  • API
  • 步骤
  • LocationProvider
    • Criteria标准
    • 追踪用户位置
  • Geocoding介绍
    • 步骤有bug

API

  1. LocationManager: 用于管理Android的用户定位服务
  2. LocationProvider:提供多种定位方式供开发者选择
    • 使用GPS定位:权限:android.permission.ACCESS_FINE_LOCATION
    • NETWORK定位:使用信号接受塔和wifi接入点进行定位:权限:android.permission.ACCESS_FINE_LOCATION或者android.permission.ACCESS_COARSE_LOCATION(粗糙定位)、

步骤

  1. 声明相应权限
  2. 获取locationManager对象
  3. 选择LocationProvider
  4. 绑定LocationListener
public class MainActivity extends AppCompatActivity {    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final TestLocationlistener listener = new TestLocationlistener();        button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //getSystemService():获取系统服务返回一个object,向下转型                LocationManager locationManager = (LocationManager) MainActivity.this.getSystemService(Context.LOCATION_SERVICE);                //1.定义当前所使用的provider类型,2发出通知的间隔的最小时间,更新位置间隔3两次定位之间的最小距离4监听器                locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, 0, 0, listener);            }        });    }    private class TestLocationlistener implements LocationListener {        @Override        public void onLocationChanged(Location location) {            Log.d("location", location.getLongitude() + "");            Log.d("location", location.getAltitude() + "");        }//当位置提供者LocationProvider定位方式状态改变,当不能够获取位置信息或者由不能获取转为 //能获取状态时调用        @Override        public void onStatusChanged(String s, int i, Bundle bundle) {        }        @Override        public void onProviderDisabled(String s) {        }        @Override        public void onProviderEnabled(String s) {        }    }}

LocationProvider

  1. 显示当前的设备有哪些可以用的provider
  2. 选择最好的provider
06-24 09:41:12.915 7095-7095/? D/location: gps06-24 09:41:12.915 7095-7095/? D/location: network//查的结果好像是记录的手机到过的位置信息06-24 09:41:12.915 7095-7095/? D/location: local_database

Criteria(标准)

  1. 创建一个Criteria对象
  2. 设置Criteria
  3. 使用getBestProvider()方法选出最好的provider

    setAccuracy(int accuracy)
    Indicates the desired accuracy for latitude and longitude.设置精度
    setAltitudeRequired(boolean altitudeRequired)
    Indicates whether the provider must provide altitude information.
    是否需要海拔信息
    setBearingAccuracy(int accuracy)
    Indicates the desired bearing accuracy.获取方向精度:
    getHorizontalAccuracy()
    Returns a constant indicating the desired horizontal accuracy (latitude and longitude).
    很多建议自己查文档

  chooseLocationProvider.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //生成一个Criteria对象                Criteria criteria = new Criteria();                //设置查询条件                criteria.setAccuracy(Criteria.ACCURACY_COARSE);                criteria.setPowerRequirement(Criteria.POWER_MEDIUM);                criteria.setAltitudeRequired(false);                criteria.setSpeedRequired(false);                criteria.setCostAllowed(false);                //获得最好的provider,如果是true的话仅返回当前已经打开的provider中查找                String provider = locationManager.getBestProvider(criteria, false);                if (provider == null) {                    Log.d("location", "找不到对应的locationProvider");                }                else {                    Log.d("location", provider);                }            }        });

追踪用户位置

 //getSystemService():获取系统服务返回一个object, //下转型                LocationManager locationManager = (LocationManager) MainActivity.this.getSystemService(Context.LOCATION_SERVICE);//1.定义当前所使用的provider类型,2发出通知的间隔的最小时 //间,更新位置间隔即最短更新位置时间3两次定位之间的最小 //距离即最短更新距离4监听器                /*主要根据这个方法追踪用户位置                * */                locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, 5000, 5000, listener);

Geocoding介绍

根据经纬度查询街道和城市,根据位置查询街道
1. 查询某地址经纬度
2. 查询某经纬度的具体地址

步骤(有bug

  1. 创建一个GeoCoder对象
  2. 调用该对象的getFromLocation()或者是getFromLocationMame()方法;
    3.建议采用第一行代码11.3.1节用法
0 0
原创粉丝点击