【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2502|回复: 2

android网络-GPS获取定位信息

[复制链接]
发表于 2012-12-23 12:28:21 | 显示全部楼层 |阅读模式
设置每60秒,每移动十米向LocationProvider获取一次GPS的定位信息

当LocationProvider可用,不可用或定位信息改变时,调用updateView,更新显示

程序效果:按下按钮后,按要求更新定位信息的显示

DDMS的Emulator Control面板中Manual输入经度和纬度值,单击“send”,即可向模拟器发出GPS定位信息(模拟手机中GPS开启状态下自动获取定位信息)


先加上两个权限,第二个为获取定位信息的权限

[html] view plaincopy


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



主activity

[java] view plaincopy


  • package com.song;  
  •   
  • import android.app.Activity;  
  • import android.location.Location;  
  • import android.location.LocationListener;  
  • 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 C613_Googlemap2Activity extends Activity {  
  •     /** Called when the activity is first created. */  
  •     Button button;  
  •     TextView textview;  
  •     LocationManager manager;  
  •     Location location;  
  •     @Override  
  •     public void onCreate(Bundle savedInstanceState) {  
  •         super.onCreate(savedInstanceState);  
  •         setContentView(R.layout.main);  
  •         textview=(TextView)findViewById(R.id.textview);  
  •         button=(Button)findViewById(R.id.button);  
  •         manager=(LocationManager)getSystemService(LOCATION_SERVICE);  
  •         //从GPS_PROVIDER获取最近的定位信息  
  •         location=manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
  •         updateView(location);  
  •         //判断GPS是否可用  
  •         System.out.println("state="+manager.isProviderEnabled(LocationManager.GPS_PROVIDER));  
  •         button.setOnClickListener(new OnClickListener() {  
  •               
  •             @Override  
  •             public void onClick(View v) {  
  •                 // TODO Auto-generated method stub  
  •                 //设置每60秒,每移动十米向LocationProvider获取一次GPS的定位信息  
  •                 //当LocationProvider可用,不可用或定位信息改变时,调用updateView,更新显示  
  •                 manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, new LocationListener() {  
  •                      
  •                     @Override  
  •                     public void onStatusChanged(String provider, int status, Bundle extras) {  
  •                         // TODO Auto-generated method stub  
  •                           
  •                     }  
  •                      
  •                     @Override  
  •                     public void onProviderEnabled(String provider) {  
  •                         // TODO Auto-generated method stub  
  •                         //  
  •                         updateView(manager.getLastKnownLocation(provider));  
  •                     }  
  •                      
  •                     @Override  
  •                     public void onProviderDisabled(String provider) {  
  •                         // TODO Auto-generated method stub  
  •                         updateView(null);  
  •                     }  
  •                      
  •                     @Override  
  •                     public void onLocationChanged(Location location) {  
  •                         // TODO Auto-generated method stub  
  •                         //location为变化完的新位置,更新显示  
  •                         updateView(location);  
  •                     }  
  •                 });  
  •             }  
  •         });  
  •     }  
  •     //更新显示内容的方法  
  •     public void updateView(Location location)  
  •     {  
  •         StringBuffer buffer=new StringBuffer();  
  •         if(location==null)  
  •         {  
  •             textview.setText("未获得服务");  
  •             return;  
  •         }  
  •         buffer.append("经度:"+location.getLongitude()+"\n");  
  •         buffer.append("纬度:"+location.getLatitude()+"\n");  
  •         buffer.append("高度:"+location.getAltitude()+"\n");  
  •         buffer.append("速度:"+location.getSpeed()+"\n");  
  •         buffer.append("方向:"+location.getBearing()+"\n");  
  •         textview.setText(buffer.toString());  
  •     }  
  • }  

显示效果


 楼主| 发表于 2012-12-23 12:40:43 | 显示全部楼层
Android GPS定位 获取经纬度
移动 是手机与手持设备的最大特点,可以通过Eclipse的DDMS视图,模拟设备的位置变化,改变经纬度后,点击send,然后运行程序,在应用程序中,动态的获取设备位置,然后显示当前的位置信息。

获取位置信息分为三步:
1. 添加系统权限,来支持对LBS硬件的访问
   <uses-permission    android:name="android.permission.ACCESS_FINE_LOCATION">
  </uses-permission>

2. 得到系统服务 的LocationManager 对象     
         LocationManager loctionManager;
        String contextService=Context.LOCATION_SERVICE;
        //通过系统服务,取得LocationManager对象
        loctionManager=(LocationManager) getSystemService(contextService);

3. 得到位置提供器,通过位置提供器,得到位置信息,可以指定具体的位置提供器,也可以提供一个标准集合,让系统根据 标准匹配最适合的位置提供器,位置信息是由位置提供其提供的。
     a.   通过GPS位置提供器获得位置(指定具体的位置提供器)
        String provider=LocationManager.GPS_PROVIDER;
       Location location = loctionManager.getLastKnownLocation(provider);
        
     b. 使用标准集合,让系统自动选择可用的最佳位置提供器,提供位置
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
        criteria.setAltitudeRequired(false);//不要求海拔
        criteria.setBearingRequired(false);//不要求方位
        criteria.setCostAllowed(true);//允许有花费
        criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗

       //从可用的位置提供器中,匹配以上标准的最佳提供器
        String provider = loctionManager.getBestProvider(criteria, true);
        
        //获得最后一次变化的位置
        Location location = loctionManager.getLastKnownLocation(provider);

最后将位置信息显示在TextView中,如图:


监听位置的变化
        //监听位置变化,2秒一次,距离10米以上
        loctionManager.requestLocationUpdates(provider, 2000, 10, locationListener);

//位置监听器
    private final LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
//当位置变化时触发
@Override
public void onLocationChanged(Location location) {
//使用新的location更新TextView显示
updateWithNewLocation(location);
}
};

通过改变位置经纬度,程序会自动更新TextView显示的位置信息

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-11-23 15:16

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表