Android 地理服务

1.User Location 能做什么

获取用户位置

追踪用户的移动

2.User Location 的关键API

Location Manager:用于管理Android的用户定位服务;

Location Providers: 提供多种定位方式供开发者选择;

3.获取用户的当前位置

Gps定位:

声明权限:android.permission.ACCESS_FINE_LOCATION

network定位:

声明权限:android.permission.ACCESS_FINE_LOCATION(精确)

或 android.permission.ACCESS_COARSE_LOCATION(不精确)

步骤:

1.在AndroidManifest.xml中声明相应的权限

2.获取LocationManager对象

3.选择LocationProvider

4.绑定LocationListener对象

4.获取最佳的LocationProvider

criteria可以设置一系列的查询条件,用于查找当前设备当中符合条件的LocationProvider

查询条件:

Criteria criteria = new Criteria();

criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度

criteria.setAltitudeRequired(true);//要求海拔信息

criteria.setBearingRequired(true);//要求方位信息

criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);//要求方位信息 的精确度

criteria.setCostAllowed(false);//是否允许付费

criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求

criteria.setSpeedAccuracy(criteria.ACCURACY_HIGH);//对速度的精确度

criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);//对水平的精确度

criteria.setSpeedRequired(true);//要求速度信息

criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);//对垂直精度

String providerFalse = locationManager.getBestProvider(criteria, false);//找到最好的Provider不管是否能用。

String providerTrue = locationManager.getBestProvider(criteria, true);//找到最好的能用的Provider。

main.xml

<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:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/buttonProvider"
        android:text="测试当前设备的provider"
        />
    <Button
        android:layout_below="@id/buttonProvider"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/buttonProviderBest"
        android:text="最好的provider"
        />

    <TextView
        android:id="@+id/AltitudeText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/buttonProviderBest"
        android:layout_below="@+id/buttonProviderBest"
        android:text="海拔/m"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/BearingText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/AltitudeText"
        android:layout_below="@+id/AltitudeText"
        android:layout_marginTop="15dp"
        android:text="方位"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/AltitudeValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/BearingText"
        android:layout_alignRight="@+id/buttonProvider"
        android:text="海拔"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/BearingValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/BearingText"
        android:layout_alignBottom="@+id/BearingText"
        android:layout_alignLeft="@+id/AltitudeValue"
        android:text="方位"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/SpeedValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/SpeedText"
        android:layout_alignBottom="@+id/SpeedText"
        android:layout_alignLeft="@+id/BearingValue"
        android:text="速度 "
        android:textSize="20dp" />

    <TextView
        android:id="@+id/SpeedText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/BearingText"
        android:layout_below="@+id/BearingText"
        android:layout_marginTop="21dp"
        android:text="速度 s/m"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/LongitudeText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/SpeedText"
        android:layout_below="@+id/SpeedText"
        android:layout_marginTop="21dp"
        android:text="经度t"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/LongitudeValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/LongitudeText"
        android:layout_alignBottom="@+id/LongitudeText"
        android:layout_alignLeft="@+id/SpeedValue"
        android:text="经度"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/LatitudeText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/SpeedText"
        android:layout_below="@+id/LongitudeValue"
        android:layout_marginTop="19dp"
        android:text="纬度t"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/LatitudeValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/LatitudeText"
        android:layout_alignBottom="@+id/LatitudeText"
        android:layout_alignLeft="@+id/SpeedValue"
        android:text="纬度"
        android:textSize="20dp" />

</RelativeLayout>

activity.java

package com.yuexin.location01;

import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

	private Button buttonProvider = null;
	private Button buttonProviderBest = null;
	private LocationManager locationManager ;
	private TextView AltitudeValue= null;
	private TextView BearingValue= null;
	private TextView SpeedValue= null;
	private TextView LongitudeValue= null;
	private TextView LatitudeValue= null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		AltitudeValue = (TextView) findViewById(R.id.AltitudeValue);
		BearingValue = (TextView) findViewById(R.id.BearingValue);
		SpeedValue = (TextView) findViewById(R.id.SpeedValue);
		LongitudeValue = (TextView) findViewById(R.id.LongitudeValue);
		LatitudeValue = (TextView) findViewById(R.id.LatitudeValue);

		buttonProvider = (Button) findViewById(R.id.buttonProvider);
		buttonProviderBest = (Button) findViewById(R.id.buttonProviderBest);
		buttonProvider.setOnClickListener(new ButtonListener());
		buttonProviderBest.setOnClickListener(new ButtonListrnerBest());
		//得到LocationManager对象
		locationManager = (LocationManager) MainActivity.this.getSystemService(LOCATION_SERVICE);
		locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener());
	}
	class ButtonListrnerBest implements OnClickListener{
		@SuppressLint("NewApi")
		@Override
		public void onClick(View arg0) {
			Criteria criteria = new Criteria();
			criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
			criteria.setAltitudeRequired(true);//要求海拔信息
			criteria.setBearingRequired(true);//要求方位信息
			criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);//要求方位信息 的精确度
			criteria.setCostAllowed(false);//是否允许付费
			criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求
			criteria.setSpeedAccuracy(criteria.ACCURACY_HIGH);//对速度的精确度
			criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);//对水平的精确度
			criteria.setSpeedRequired(true);//要求速度信息
			criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);//对垂直精度
			String providerFalse = locationManager.getBestProvider(criteria, false);//找到最好的Provider不管是否能用。
			String providerTrue = locationManager.getBestProvider(criteria, true);//找到最好的能用的Provider。
			//locationManager.requestLocationUpdates(providerTrue, 0, 0, new LocationListener());
			System.out.println("providerFalse---->"+providerFalse);
			System.out.println("providerTrue---->"+providerTrue);
		}
	}
	class ButtonListener implements OnClickListener{

		@Override
		public void onClick(View arg0) {
			/*
			//得到LocationManager对象
			LocationManager locationManager = (LocationManager) MainActivity.this.getSystemService(LOCATION_SERVICE);
//			1.定义当前使用的LocationManager
//			2.定义两次定位的间隔大小。
//			3.两次定位之间的最小距离
			locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener());
			*/

			List<String> allProvider = locationManager.getAllProviders();
			for (int i = 0; i < allProvider.size(); i++) {
				System.out.println(allProvider.get(i));
			}
		}

	}

	private class LocationListener implements android.location.LocationListener{

		@Override
		public void onLocationChanged(Location location) {
			// 设备位置发生改变Location为对象的位置
			System.out.println(location.getLongitude());//经度
			System.out.println(location.getLatitude());//维度
			AltitudeValue.setText(String.format("%.8f",location.getAltitude()));
			BearingValue.setText(String.format("%.8f",location.getBearing()));
			SpeedValue.setText(String.format("%.8f",location.getSpeed()));
			LongitudeValue.setText(String.format("%.8f",location.getLongitude()));
			LatitudeValue.setText(String.format("%.8f",location.getLatitude()));
		}

		@Override
		public void onProviderDisabled(String arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onProviderEnabled(String arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
			// TODO Auto-generated method stub

		}

	}

}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yuexin.location01"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.yuexin.location01.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>

</manifest>

Android 地理服务

时间: 2024-10-06 07:25:00

Android 地理服务的相关文章

Android 定位服务(Location-Based Services)

Android定位服务融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综合应用服务.近些年来,基于位置的服务发展更为迅速,涉及商务.医疗.工作和生活的各个方面,为用户提供定位.追踪和敏感区域警告等一系列服务. Android平台支持提供位置服务的API,在开发过程中主要使用LocationManager和LocationProviders对象. - LocationManager: 用来获取当前位置,追踪设备的移动路线,或设定敏感区域,在进入或离开敏感区域时设备会发出特定警报.

3D语音天气球——在Unity中使用Android语音服务

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3D语音天气球(源码分享)--创建可旋转的3D球 二:通过天气服务,从网络获取时实天气信息并动态生成"3D球":3D语音天气球(源码分享)--通过天气服务动态创建3D球 三:Android语音服务和Unity的消息传递 四:Unity3D端和Android端的结合 前两篇文章已经介绍了如何创

Android 定位服务(转载)

今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整.同时发现我对android的GPS服务了解并不深,所以今天特意阅读了有关GPS服务的一些资料,把相关知识点记录下来. 本人做了GPS相关的嵌入式软件已经几年了,所以说起要做个测试GPS定位模块的程序,第一反应就是串口读取GPS模块的数据,然后解析GPS的NMEA格式数据.NMEA是一种标准化数据格

Android Service服务——初识

很抱歉(对我,也是对大家)过了两个星期说好的要发的博客迟迟没有动静,因为最近在与高等数学死磕,同时参加了一个党内的培训,所以现在的学习生活有些紧张,自己的的草稿都堆积了好几篇了,现在我就对于我应朋友之情需要完成一个android的播放器,对于其中的一些简单的要点,写一些自己的感悟. 首先我要提到的时Android  Service服务,其实我接触到Service这个概念的时间并不长,首先在做这个不能算作工程的东西时,我就想到了,android需要有这样的一个机制,通过一个程序去控制歌曲的播放,同

Android service 服务

Android的服务: 1:已启动方式: startService()和bindService(): startService:启动后,如果Activity关闭了,服务依然运行,除非stopService: bindService:创建开启服务器,但是在程序关闭的时候,会自动关闭服务: 通过ServiceConnectionjava接口获取service的IBinder接口: 2:控制服务(绑定服务): (1)但是上述两个方式都是通过Intent创建启动服务的,没有通过new,所以没有直接控制s

Android从服务端获取json解析显示在客户端上面

Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高; 因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet): 构造的Json数据如下: [{"name":"张三",&

Android Service服务-(转)

Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互. 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务.这两个方法都可以启动Service,但是它们的使用场合有所不同.    1. 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行.    如果打算采用Context.startService(

实现Android语音识别服务接口 RecognitionService的方法

之前的一篇文章介绍过SpeechRecognizer类,该类可以作为对外的一个接口,并通过Intent传递一个ComponentName获取可支持语音识别的功能的服务,一般的用户手机中如果安装了语音识别的一些软件,就会拥有这样的能力,但是如果开发者希望自己通过某公司的sdk集成自己的语音识别服务,那么就需要实现RecognitionService这个类. 这个类是个抽象类,需要开发者完成其中的几个抽象方法.下面的代码注释中对每个方法进行了说明. <pre name="code"

Android Service 服务(三)—— bindService与remoteService

(转自:http://blog.csdn.net/ithomer/article/details/7366396)   一.bindService简介 bindService是绑定Service服务,执行service服务中的逻辑流程. service通过Context.startService()方法开始,通过Context.stopService()方法停止:也可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止自己.只要调用一次st