Android开发之手机定位

手机定位基于以下三种方式:1. 网络定位 ;2. 基站定位; 3. GPS定位

1 网络定位

前提是必须连上网络:Wifi、3G、2G

获取到IP地址

例如:彩虹版QQ,珊瑚虫版QQ,就有一个功能显示对方的IP;

根据IP显示具体的位置;

原理是建立一个库那个IP地址对应那个地方;早期警方破案就采用此特点;

有局限性:针对固定的IP地址。

如果手机网或者ip地址是动态分布IP,这个偏差就很大。这种情况是无法满足需求的。

2 基站定位

工作原理:手机能打电话,是需要基站的。手机定位也是用基站的。

手机附近能收到3个基站的信号,就可以定位了。

基站定位有可能很准确,比如基站多的地方;

如果基站少的话就会相差很大。

精确度:几十米到几公里不等;

3 GPS定位

A-GPS 使用了卫星定位 需要联网辅助修正位置(手机经常使用,优先请求网络,获取之前保存的卫星轨道的信息cache,)

特点是:需要搜索卫星, 头顶必须是空旷的;

影响条件:云层、大厦、大树。

以下是实现的代码:

package com.andy.gpsdemo;

import com.example.gpsdemo.R;

import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {
	// 位置服务
	private LocationManager locationManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

		/*List<String> provider = locationManager.getAllProviders();
		for (String string : provider) {
			System.out.println(string);
		}*/

		// 注册监听位置服务
		// 给位置提供者设置条件
		Criteria criteria = new Criteria();
		criteria.setAccuracy(Criteria.ACCURACY_FINE);// 获取精确的位置
		// criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
		// criteria.setAltitudeRequired(false);//不要求海拔信息
		// criteria.setBearingRequired(false);//不要求方位信息
		// criteria.setCostAllowed(true);//是否允许付费
		// criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求

		String proveder = locationManager.getBestProvider(criteria, true);
		locationManager.requestLocationUpdates(proveder, 0, 0,
				new LocationListener() {

					@Override
					public void onLocationChanged(Location location) {
						// 当改变位置时回调
						String longitude = "经度:" + location.getLongitude();
						String latitudeString = "维度:" + location.getLatitude();
						String accuracy = "精确度:" + location.getAccuracy();
						TextView textView = new TextView(MainActivity.this);
						textView.setText(longitude + "\n" + latitudeString
								+ "\n" + accuracy);

						setContentView(textView);
					}

					@Override
					public void onProviderDisabled(String provider) {
						// 当一个位置提供者不可以使用
					}

					@Override
					public void onProviderEnabled(String provider) {
						// 当一个位置提供者可以使用
					}

					@Override
					public void onStatusChanged(String provider, int status,
							Bundle extras) {
						// 当状态发生改变的时候回调 开启--关闭 ;关闭--开启
					}

				});
	}

}

布局文件为:

<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="com.andy.gpsdemo.MainActivity" >

    <TextView
        android:textSize="22sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

需要加入的权限为:

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>//模拟器测试使用

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

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

时间: 2024-10-17 21:15:05

Android开发之手机定位的相关文章

《Android开发卷——手机联系人T9搜索》

    自己研究了好几天联系人的T9搜索算法, 先分享出来给大家看看. 欢迎指教.如果有大神有更好的T9搜索算法, 那更好啊,大家一起研究研究,谢谢. 第一部分是比较简单的获取手机联系人. 获取联系人前提要有权限. <uses-permission android:name="android.permission.READ_CONTACTS" /> 因为手机的联系人都存储在数据库里面,所以我们只要把数据库里的信息查询出来即可. private static final St

Android开发之手机铃声代码实现

如果读到的是音频文件路径,需要先将音乐文件插入到多媒体库.如:path传入:/mnt/sdcard/mp3/a.mp3 //设置--铃声的具体方法 public void setMyRingtone(String path) { File sdfile = new File(path); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePa

Android开发之手机拍照功能的实现(源代码分享)

Android系统里调用手机拍照的功能有两种方法一种直接调用手机自带的相机另一种就是使用自己做的拍照应用.比如Camera360 一款于各操作系统都有的的功能强大的手机摄影软件:能拍摄出不同风格,不同特效的照片,同时具有云服务和互联网分享功能,全球用户已经超过2.5亿.现在专门的开发一款手机摄影软件肯定没多大意义,已经比不过这些前辈了,我们只需学会如何调用手机自带的摄像机完成拍照并把照片获取过来,为用户提供上传头像,发表图文微博,传送图片的功能即可.完成上述的功能十分的简单,甚至不需要在清单文件

Android开发华为手机无法看log日志解决方法

Android开发华为手机无法看log日志解决方法 上班的时候,由于开发工具由Eclipse改成Android Studio后,原本的华为手机突然无法查看崩溃日志了,大家都知道,若是无法查看日志要它毛用啊? 刚开始没想过是手机问题,毕竟在Eclipse中是完好了,结果在AS中华为了大量时间查找原因,最后,偶然换个手机发现别的手机正常... 最后百度发现解决方法: 进入拨号界面输入:*#*#2846579#*#* 依次选择[工程菜单 —> 后台设置 —> LOG设置 —> LOG开关]  

ubuntu下android开发安装手机驱动

1.配置环境变量 进入终端,输入 sudo gedit ~/.bashrc 在文件的最后追加: #set path for android sdk tools export PATH=$PATH:/your_android-sdk-linux_path/tools/ export PATH=$PATH:/your_android-sdk-linux_path/platform-tools/ 这里的your_android-sdk-linux_path是绝对路径 最新的SDK要改为:$PATH:$

Ubuntu下Android开发:手机不能识别

1) 在终端运行 lsusb 会发现结果有会有如下类似记录: Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 005: ID 1219:0102               #这行就是 手机 Bus 004 Device 001: ID 1d6b:0001 Linu

Android开发遇到手机无法弹出Toast

今天遇到了一个很奇怪的问题,一个很简单的程序,就是点击按钮弹出一个Toast,但在手机上运行起来,却没有正常弹出Toast 第一反应就是看看是否调用了show方法,很显然,并不是这个低级问题,为了确定范围,使用另一部手机运行了一下,结果正常弹出了Toast 这样问题就基本明确了,手机问题!!! 费劲一番周折后,找到了解决的方法,在手机的设置 -> (某些手机前面可能有一项安全与隐私)通知中心 -> 将所运行的应用的状态栏开启就ok了

android开发 百度地图 定位小圆点不在当前位置

注意经纬度要定义为全局变量,且此处不能直接使用location.getAttitude()和location.getLongitude 否则地图小圆点将显示在经纬度(0,0)位置.

Android LBS中基站定位

android基站定位程序获取地理位置 Android开发之位置定位详解与实例解析(GPS定位.Google网络定位,BaiduLBS(SDK)定位) Location服务之Geocoder