几十米到几英里的标称误差,.经常获取Location 有GPS 获取

手提式有线电话机定位的二种办法:网络牢固,基站定位,GPS定位

使用手提式无线电话机获取所在地方的经纬度:

 

Location 在Android 开荒中照旧临时利用的,举个例子通过经纬度获取天气,依据Location 获取所在地点详细Address (例如GoogleMap 开采).等。而在Android 中通过LocationManager 来赢得Location
.经常获取Location 有GPS 获取,WIFI 获取. 如下介绍GPS获取Location:

 

第一步:

互连网稳固,手提式有线电话机连上wifi 2g
3g的时候,手提式有线电话机缘有一个ip,测量误差十分的大

制造三个Android 工程命名叫GPS

基站定位,准确度与基站的有一点点有关,几十米到几英里的基值误差

 

GPS定位,起码供给三颗卫星技术稳固,在辽阔的地点规范

第二步:

 

在MainActivity中行使LocationManager获取经纬度:

手提式有线电话机应用A-GPS需求互联网来救助定位,定位速度快,网络记录了上次的卫星轨道,

import java.util.List;

 

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

 

public class MainActivity extends Activity {
    private LocationManager manager;
    private SharedPreferences sp;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        manager = (LocationManager)
getSystemService(LOCATION_SE科雷傲VICE);//获取手提式有线电话飞机地点置音信
        
        List<String> providers = manager.getAllProviders();
        
//        for (String provider : providers) {
//            System.out.println(provider);
//        }
       

获取LocationManager对象,通过getSystemService(LOCATION_SERVICE)

       //获取的标准
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);//获取精准地方
        criteria.setCostAllowed(true);//允许爆发开支
       
criteria.setPowerRequirement(Criteria.POWER_HIGH);//消耗大的话,获取的成效高
        criteria.setSpeedRequired(true);//手提式无线话飞机地方置移动
        criteria.setAltitudeRequired(true);//海拔
        
        //获取最棒provider: 手提式无线电话机可能模拟器上均为gps
        String bestProvider = manager.getBestProvider(criteria,
true);//使用GPS卫星
        
        System.out.println(“最佳之处提供者是”+bestProvider);
        sp = getSharedPreferences(“config”,MODE_PRIVATE);
        
        //parameter: 1. provider 2. 每间距多少时间获得壹回  3.每间距多少米 
4.监听器触发回调函数
        manager.requestLocationUpdates(bestProvider,60000,100, new
MyLocationListener());
    }
    
    private class MyLocationListener implements LocationListener{
        /**
         * 手提式有线话飞机地方置产生退换
         */
        public void onLocationChanged(Location location) {
            location.getAccuracy();//精确度
            String  latitude = location.getLatitude()+””;//经度
            String longitude = location.getLongitude()+””;//纬度
           

调用LocationManager对象的requestLocationUpdates()方法,乞请地点更新,参数:

            //将获取到的中纬度消息存入SharedPreferences
            Editor editor = sp.edit();
            editor.putString(“lastloaction”, latitude + “-” +
longitude);
            editor.commit();
            
        }
        
        /**
         * 当有个别地点提供者的气象发生改变时
         */
        public void onStatusChanged(String provider, int status, Bundle
extras) {
            
        }
        
        
        /**
         * 有些设备伸开时
         */
        public void onProviderEnabled(String provider) {
            
        }

永久方式(“gps”卡塔 尔(阿拉伯语:قطر‎,更新时间(60000卡塔尔,更新间隔(50卡塔尔,LocationListener对象

        
        /**
         * 某些设备关闭时
         */
        public void onProviderDisabled(String provider) {
            
        }
        
    }
}

 

第三步:

LocationListener是二个接口,要求做它的兑现类

在AndroidManifest.xml中展开如下配置(参与Location相关权限):

定义MyLocationListener达成LocationListener,完成它下边的法门

 

onLocationChanged(),当地方变动的时候回调,传递步向一个Location对象

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest
xmlns:android=”http://schemas.android.com/apk/res/android
    package=”cn.itcast.gps”
    android:versionCode=”1″
    android:versionName=”1.0″ >

调用location对象的getLongitude()方法,获得经度

    <uses-sdk android:minSdkVersion=”8″ />
    <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”/>

调用Location对象的getLatitude()方法,获得维度

    <application
        android:icon=”@drawable/ic_launcher”
        android:label=”@string/app_name” >
        <activity
            android:name=”.DemoActivity”
            android:label=”@string/app_name” >
            <intent-filter>
                <action android:name=”android.intent.action.MAIN”
/>

调用Location对象的getAccuracy()方法,获得正确度

                <category
android:name=”android.intent.category.LAUNCHER” />
            </intent-filter>
        </activity>
    </application>

 

第四步:

onStatusChanged(),当状态改良的时候回调,关闭 开启

配置应用程序,可在代码中参预Log.i() ,在LogCat中观望打字与印刷音信

onProviderEnabled(),当某叁个地点提供者可用了

要么直接导出 data/data/<packagename>/share_pre/config.xml
文件间接观看

onProviderDisabled(),当某三个职位提供者不可用了

 

 

能够将经纬度自行在网址上海展览中心开查询

当activity销毁的时候,废除监听位置

 

重写activity的onDestroy()方法

注意:

调用LocationManager对象的removeUpdates(),撤废监听,参数:LocationListener对象

android2.3 有bug,定位后不曾提醒

把LocationListener对象置为null,垃圾回笼

2.3模拟器不匡帮手动发送模拟的中纬度

 

可采用2.2的模拟器

亟需的权力

android.permission.ACCESS_FINE_LOCATION 获取精准地方

android.permission.ACCESS_COARSE_LOCATION 获取粗略的岗位

android.permission.ACCESS_MOCK_LOCATION 获取模拟的职位(模拟器开荒的时候卡塔尔国

 

模拟器上,ddms里面发送以下任务,技巧展现

 

国家对坐标进行了加偏管理,变成金星坐标,供给国家测量绘制局的插件,网络有木星坐标调换代码

package com.tsh.mylocation;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {
    private LocationManager lm;
    private LocationListener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取位置管理器
        lm=(LocationManager) getSystemService(LOCATION_SERVICE);
        listener=new MyLocationListener();
        lm.requestLocationUpdates("gps", 0, 0, listener);
    }
    private class MyLocationListener implements LocationListener{

        @Override
        public void onLocationChanged(Location location) {
            //获取经度
            String longitude="经度:"+location.getLongitude();
            String latitude="纬度:"+location.getLatitude();
            String acc="精确度:"+location.getAccuracy();
            Toast.makeText(MainActivity.this, longitude+latitude+acc, 1).show();
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {

        }

    }
}

 

相关文章