android定位

转载:http://hbiao68.iteye.com/blog/1335011

User Location能做什么?
1、获取用户的位置
2、追踪用户的移动

GPS定位比较准确,但是很费电

 


GPS定位:使用GPS卫星定位,需要在AndroidManifest.xml中声明权限:

NETWORK定位:使用信号接收塔和WIFI介入点进行定位,需要在AndroidManifest.xml文件中声明权限:

1、Location Manager:用户管理android用户定位的服务
2、Location Providers:提供了多种定位方式供开发者选择

Criteria可以设置一系列的查询条件,可以根据指定的Criteria条件来过滤获得LocationProvider
不同的LocationProvider决定了定位能力,包括费用、耗电多少、精确度,还会有一些方向、速度、和高速信息。

获取用户当前位置的步骤:
1、在AndroidManifest.xml当中声明权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
2、获取LocationManager对象
3、选择LocationProvider
4、绑定LocationListener对象

 

Java代码 
public class MainActivity extends Activity { 
    LocationManager lm; 
    MyLocationListener listener = new MyLocationListener(); 
       
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
           
        findViewById(R.id.genzong).setOnClickListener(new Button.OnClickListener(){ 
            @Override 
            public void onClick(View v) { 
                lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
                 //第一个参数选择合适的provider,第二个参数是时间间隔是1秒中, 
                //第三个参数是位置发生0米的变化就会触发,第四个参数是触发的监听器 
                lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, listener); 
            
        }); 
           
        findViewById(R.id.dingwei).setOnClickListener(new Button.OnClickListener(){ 
            @Override 
            public void onClick(View v) { 
                lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
                Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
                printLocation(location); 
            
        }); 
           
        findViewById(R.id.criteria).setOnClickListener(new Button.OnClickListener(){ 
            @Override 
            public void onClick(View v) { 
                System.out.println("R.id.criteria"); 
                lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
                Criteria criteria = new Criteria(); 
                //设置精确程度为高精确 
                criteria.setAccuracy(Criteria.ACCURACY_FINE); 
                //设置是否需要高度设置 
                criteria.setAltitudeRequired(false); 
                //是否需要方位设置 
                criteria.setBearingRequired(false); 
                //是否需要速度信息 
                criteria.setSpeedRequired(true); 
                //是否产生费用 
                criteria.setCostAllowed(true); 
//              //获取最符合条件的LocationProvider,true表示只返回可以使用的locationProvider 
//              String bestProvider = lm.getBestProvider(criteria, true); 
                //获取所有符合条件的locationProvider,false表示不可用的locationProvider也显示出来 
                List<String> matchProviders = lm.getProviders(criteria, false); 
                for(String temp : matchProviders){ 
                    System.out.println(temp); 
                
            
        }); 
    
       
    public static void printLocation(Location l){ 
        System.out.println("jingdu :" + l.getAccuracy()); 
        System.out.println("gaodu : " + l.getAltitude()); 
        System.out.println("fangxiang : " + l.getBearing()); 
        System.out.println("sudu : " + l.getSpeed()); 
    
       
    public class MyLocationListener implements LocationListener{ 
        //位置更新的时候调用下面的方法 
        @Override 
        public void onLocationChanged(Location location) { 
            System.out.println("jingdu : " + location.getLongitude()); 
            System.out.println("weidu : " + location.getLatitude()); 
        
   
        @Override 
        public void onProviderDisabled(String provider) { 
        
   
        @Override 
        public void onProviderEnabled(String provider) { 
        
   
        @Override 
        public void onStatusChanged(String provider, int status, Bundle extras) { 
        
    

  

posted on   南瓜饼  阅读(345)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2012年4月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12
点击右上角即可分享
微信分享提示