Android开发之用户定位
用户定位一、简单的UserLocation1、UserLocation用来干什么获取用户位置,追踪用户移动2、UserLocation的关键APILocationManager: 用于管理定位的服务LocationProvider:提供定位方式,GPS/NetWork/passive3、定位方式...
·
用户定位
一、简单的UserLocation
1、UserLocation用来干什么
获取用户位置,追踪用户移动
2、UserLocation的关键API
LocationManager: 用于管理定位的服务
LocationProvider:提供定位方式,GPS/NetWork/passive
3、定位方式
A、使用GPS卫星,需要在AndroidMenifest中声明权限
android.permission.ACCESS_FINE_LOCATION 这是一个比较精确的定位
B、NetWork,用信号接收塔和WiFi接入点,需要在AndroidMenifest中声明权限
android.permission.ACCESS_COARSE_LOCATION 这是一个不很精确的定位
或者
android.permission.ACCESS_FINE_LOCATION
4、获取当前位置的步骤
A、在AndroidMenifest中声明权限
B、获取LocationManager(获取定位服务)
LocationManager locationManager=(LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE)
C、选择LocationProvider(选择定位方式)
D、绑定一个LocationListnener对象,当用户位置发生改变时,会触发监听器
//第一个参数是定位的方式,第二个参数是定位的周期(单位ms)
//第三个参数是定位的距离,每隔多少米定位一次
//第四个参数是监听器
locationManager.requestLocationUpdates(LocationMnager.GPS_PROVIDER, 0, 0, new testLocationListener)
5、LocationListener的四个方法
A、onLocationChanged,当用户位置发生改变时调用该方法
B、onProviderDisabled,当提供数据的provider不能使用时调用该方法
C、onProviderEnabled,当提供数据的provider可以使用时调用该方法
D、onStatusChanged,当提供数据的provider发生改变时调用该方法
6、Android模拟器可以模拟定位服务,启动Eclipse的DDMS视图,可以发送经度和纬度到模拟器
二、选择最佳定位方式,追踪位置
1、得到所有的LocationProvider
LocationManager.getAllProviders(),将结果打印出来可以知道有三种定位方式GPS/NetWork/passive
2、Android通过Criteria来设置一系列的查询条件,用于查询符合条件的LocationProvider
Criteria criteria = new Criteria()
所谓最佳定位方式,就是满足当前设定条件的定位方式,Criteria可以设定的条件有
(1)、criteria.setAccuracy(int accuracy)
设置定位的精确度,有两种取值ACCURACY_COARSE(精确度不太高) ACCURACY_FINE(精确度高)
(2)、criteria.setAltitudeRequired(boolean altitudeRequired)
设置是否需要测试海拔,TRUE/FALSE
(3)、criteria.setBearingRequired(boolean bearingRequired)
设置是否需要获取方向
(4)、criteria.setBearingAccuracy(int bearingAccuracy)
设置获取方向的精度,取值ACCURACY_HIGN/ACCURACY_LOW
(5)、criteria.setCostAllowed(int costAllowed)
设置是否可以发生收费现象
(6)、criteria.setHorizontalAccuracy(int accuracy)
设置水平方向的精度,取值 ACCURACY_HIGN/ACCURACY_LOW/ACCURACY_MEDIUM
(7)、criteria.setVerticalAccuracy(int accuracy)
设置垂直方向的精度,取值 ACCURACY_HIGN/ACCURACY_LOW/ACCURACY_MEDIUM
(8)、criteria.setPowerRequirement(int level)
设置电量消耗的级别,取值PEWER_LOW/POWER_MEDIUM/POWER_HIGH
(9)、criteria.setSpeedRequired(boolean speedRequired)
设置是否需求速度
(10)、criteria.setSpeedAccuracy(int accuracy)
设置速度的精度,取值ACCURACY_HIGN/ACCURACY_LOW/ACCURACY_MEDIUM
3、获取最佳定位方式
//第一个参数是当前设置的条件
//第二个参数是false,会查询当前所有的定位方式;第二个参数真true,查询已经打开的定位方式
locationManager.getBestProvider(criteria, false)
三、源代码
MainActivity.java
getBestLocationProvider.java
AndroidMenifest.xml
activity_main.xml
一、简单的UserLocation
1、UserLocation用来干什么
获取用户位置,追踪用户移动
2、UserLocation的关键API
LocationManager: 用于管理定位的服务
LocationProvider:提供定位方式,GPS/NetWork/passive
3、定位方式
A、使用GPS卫星,需要在AndroidMenifest中声明权限
android.permission.ACCESS_FINE_LOCATION 这是一个比较精确的定位
B、NetWork,用信号接收塔和WiFi接入点,需要在AndroidMenifest中声明权限
android.permission.ACCESS_COARSE_LOCATION 这是一个不很精确的定位
或者
android.permission.ACCESS_FINE_LOCATION
4、获取当前位置的步骤
A、在AndroidMenifest中声明权限
B、获取LocationManager(获取定位服务)
LocationManager locationManager=(LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE)
C、选择LocationProvider(选择定位方式)
D、绑定一个LocationListnener对象,当用户位置发生改变时,会触发监听器
//第一个参数是定位的方式,第二个参数是定位的周期(单位ms)
//第三个参数是定位的距离,每隔多少米定位一次
//第四个参数是监听器
locationManager.requestLocationUpdates(LocationMnager.GPS_PROVIDER, 0, 0, new testLocationListener)
5、LocationListener的四个方法
A、onLocationChanged,当用户位置发生改变时调用该方法
B、onProviderDisabled,当提供数据的provider不能使用时调用该方法
C、onProviderEnabled,当提供数据的provider可以使用时调用该方法
D、onStatusChanged,当提供数据的provider发生改变时调用该方法
6、Android模拟器可以模拟定位服务,启动Eclipse的DDMS视图,可以发送经度和纬度到模拟器
二、选择最佳定位方式,追踪位置
1、得到所有的LocationProvider
LocationManager.getAllProviders(),将结果打印出来可以知道有三种定位方式GPS/NetWork/passive
2、Android通过Criteria来设置一系列的查询条件,用于查询符合条件的LocationProvider
Criteria criteria = new Criteria()
所谓最佳定位方式,就是满足当前设定条件的定位方式,Criteria可以设定的条件有
(1)、criteria.setAccuracy(int accuracy)
设置定位的精确度,有两种取值ACCURACY_COARSE(精确度不太高) ACCURACY_FINE(精确度高)
(2)、criteria.setAltitudeRequired(boolean altitudeRequired)
设置是否需要测试海拔,TRUE/FALSE
(3)、criteria.setBearingRequired(boolean bearingRequired)
设置是否需要获取方向
(4)、criteria.setBearingAccuracy(int bearingAccuracy)
设置获取方向的精度,取值ACCURACY_HIGN/ACCURACY_LOW
(5)、criteria.setCostAllowed(int costAllowed)
设置是否可以发生收费现象
(6)、criteria.setHorizontalAccuracy(int accuracy)
设置水平方向的精度,取值 ACCURACY_HIGN/ACCURACY_LOW/ACCURACY_MEDIUM
(7)、criteria.setVerticalAccuracy(int accuracy)
设置垂直方向的精度,取值 ACCURACY_HIGN/ACCURACY_LOW/ACCURACY_MEDIUM
(8)、criteria.setPowerRequirement(int level)
设置电量消耗的级别,取值PEWER_LOW/POWER_MEDIUM/POWER_HIGH
(9)、criteria.setSpeedRequired(boolean speedRequired)
设置是否需求速度
(10)、criteria.setSpeedAccuracy(int accuracy)
设置速度的精度,取值ACCURACY_HIGN/ACCURACY_LOW/ACCURACY_MEDIUM
3、获取最佳定位方式
//第一个参数是当前设置的条件
//第二个参数是false,会查询当前所有的定位方式;第二个参数真true,查询已经打开的定位方式
locationManager.getBestProvider(criteria, false)
三、源代码
MainActivity.java
点击(此处)折叠或打开
- package com.example.location;
- import java.util.Iterator;
- import java.util.List;
- import android.location.Criteria;
- import android.location.Location;
- import android.location.LocationListener;
- import android.location.LocationManager;
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.DialogInterface.OnClickListener;
- import android.view.Menu;
- import android.view.View;
- import android.widget.Button;
- public class MainActivity extends Activity {
-
- private Button getLocationBtn = null;
- private Button getBestProviderBtn = null;
- private Button getAllProviderBtn = null;
- private LocationManager locationManager = null;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- //获取按钮
- getLocationBtn = (Button)findViewById(R.id.getLocationBtn);
- getAllProviderBtn = (Button)findViewById(R.id.getAllProviderBtn);
- getBestProviderBtn = (Button)findViewById(R.id.getBestProviderBtn);
- //为按钮绑定监听器
- getLocationBtn.setOnClickListener(new btnListener());
- getAllProviderBtn.setOnClickListener(new btnListener());
- getBestProviderBtn.setOnClickListener(new btnListener());
-
- //获取LocationManager(获取定位服务)
- locationManager=(LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE);
- }
- class testLocationListener implements LocationListener
- {
- @Override
- public void onLocationChanged(Location location)
- {
- // TODO Auto-generated method stub
- //打印出纬度
- System.out.println(location.getLatitude());
- //打印出经度
- System.out.println(location.getLongitude());
- }
- @Override
- public void onProviderDisabled(String provider)
- {
- // TODO Auto-generated method stub
-
- }
- @Override
- public void onProviderEnabled(String provider)
- {
- // TODO Auto-generated method stub
-
- }
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras)
- {
- // TODO Auto-generated method stub
-
- }
-
- }
- class btnListener implements android.view.View.OnClickListener
- {
- @Override
- public void onClick(View v)
- {
- // TODO Auto-generated method stub
- switch(v.getId())
- {
- case R.id.getAllProviderBtn:
- ListString> providers = locationManager.getAllProviders();
- for(Iterator iterator=providers.iterator(); iterator.hasNext(); )
- {
- String provider = (String)iterator.next();
- System.out.println(provider);
- }
- break;
- case R.id.getBestProviderBtn:
- getBestLocationProvider provider = new getBestLocationProvider();
- System.out.println(provider.getProvider(locationManager, provider.setCriteria()));
- break;
- case R.id.getLocationBtn:
- //绑定一个LocationListnener对象,当用户位置发生改变时,会触发监听器
- //第一个参数是定位的方式,第二个参数是定位的周期(单位ms)
- //第三个参数是定位的距离,每隔多少米定位一次
- //第四个参数是监听器
- locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new testLocationListener());
- break;
- default:
- break;
- }
- }
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
-
- }
点击(此处)折叠或打开
- package com.example.location;
- import android.location.Criteria;
- import android.location.LocationManager;
- import android.widget.Button;
- public class getBestLocationProvider
- {
-
- //设置查询条件
- public Criteria setCriteria()
- {
- Criteria criteria = new Criteria();
- //要求高精度
- criteria.setAccuracy(Criteria.ACCURACY_FINE);
- //要求省电
- criteria.setPowerRequirement(Criteria.POWER_LOW);
- //要求不能产生费用
- criteria.setCostAllowed(false);
- //不要求速度
- criteria.setSpeedRequired(false);
-
- return criteria;
- }
- //获取满足条件的最佳provider
- public String getProvider(LocationManager locationManager, Criteria criteria)
- {
- return locationManager.getBestProvider(criteria, false);
- }
- }
点击(此处)折叠或打开
- ?xml version="1.0" encoding="utf-8"?>
- manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.location"
- android:versionCode="1"
- android:versionName="1.0" >
- uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="18" />
- application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- activity
- android:name="com.example.location.MainActivity"
- android:label="@string/app_name" >
- intent-filter>
- action android:name="android.intent.action.MAIN" />
- category android:name="android.intent.category.LAUNCHER" />
- /intent-filter>
- /activity>
- /application>
- uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- /manifest>
点击(此处)折叠或打开
- RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".MainActivity" >
- Button
- android:id="@+id/getLocationBtn"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="用户定位" />
- Button
- android:id="@+id/getAllProviderBtn"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_below="@+id/getLocationBtn"
- android:text="所有定位方式" />
- Button
- android:id="@+id/getBestProviderBtn"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_below="@+id/getAllProviderBtn"
- android:text="最佳定位方式" />
- /RelativeLayout>
更多推荐



所有评论(0)