• Android初级教程获取手机位置信息GPS与动态获取最佳方式


    简单介绍一下gps定位的操作。

    主要是靠locationmanger这个api完成的一些操作;通过获取这个实例,然后调用它的requestLocationUpdates方法进行注册。传入的参数分别有以下含义:

                 * 1、provider:哪种定位方式
                 * 2、minTime:定位的时间差
                 * 3、minDistance:定位距离差
                 * 4、定位监听回调

    然后第四个参数是一个监听器,要回调这个方法,监听位置的变化情况。实时更新所在位置

    程序代码如下:

    package com.example.gps;
    
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        private TextView tv_show_location;
    
    	@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            tv_show_location = (TextView) findViewById(R.id.tv_show_location);
            
            //获取定位管理器
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            //设置定位信息
            //坐标位置改变,回调此监听方法
            LocationListener listener = 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
            		
            	}
            	
            	@Override
            	public void onProviderDisabled(String provider) {
            		// TODO Auto-generated method stub
            		
            	}
            	
            	//位置改变的时候调用,这个方法用于返回一些位置信息
            	@Override
            	public void onLocationChanged(Location location) {
            		//获取位置变化结果
            		float accuracy = location.getAccuracy();//精确度,以密为单位
            		double altitude = location.getAltitude();//获取海拔高度
            		double longitude = location.getLongitude();//经度
            		double latitude = location.getLatitude();//纬度
            		float speed = location.getSpeed();//速度
            		
            		//显示位置信息
            		tv_show_location.append("accuracy:"+accuracy+"
    ");
            		tv_show_location.append("altitude:"+altitude+"
    ");
            		tv_show_location.append("longitude:"+longitude+"
    ");
            		tv_show_location.append("latitude:"+latitude+"
    ");
            		tv_show_location.append("speed:"+speed+"
    ");
            	}
            };
            locationManager.requestLocationUpdates("gps", 0, 0, listener);//Register for location updates
        }
    }
    
    
    


    而如果想自动获取最佳定位方式的话,加入以下代码即可:

     //动态获取所有的定位方式
    	        List<String> allProviders = locationManager.getAllProviders();
    	        for (String string : allProviders) {
    				System.out.println("所有定位方式:>>>"+string);
    			}
    	        
    	        Criteria criteria = new Criteria();
    	        criteria.setCostAllowed(true);//设置产生费用,收费的一般比较精确
    	        criteria.setAccuracy(Criteria.ACCURACY_FINE);//精确度设为最佳
    	        
    	        //动态获取最佳定位方式
    	        String bestProvider = locationManager.getBestProvider(criteria, true);
    	        /**
    	         * 1、provider:那种定位方式
    	         * 2、minTime:定位的时间差
    	         * 3、minDistance:定位距离差
    	         * 4、定位监听回调
    	         * 
    	         */
    	        //Register for location updates 
    	        locationManager.requestLocationUpdates(bestProvider, 0, 0, listener);
    用模拟器的话。需要配置三个权限:

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

    第二个专门针对模拟器的权限,真机则不需要。

    运行程序,用DDMS的Maual下的Decimal发送变化的位置信息,则可以在手机上显示坐标的变化。


    对于基于位置的操作,建议在真机上测试。

  • 相关阅读:
    Emit介绍【转】
    在.NET中使用反射实现简易插件机制【转】
    RabbitMQ笔记-Qos与消息应答
    Http级别缓存助手类(ASP.Net Core)
    实现一个迷你IOC容器
    使用CMake在Windows环境下的VS2019中配置openCV
    如何在Visual Studio 2019中启动并配置一个使用pyTorch的C++项目(Windows系统,CMAKE项目)
    windows环境下使用python中tensorflow的tensorboard功能无法创建指定路径的问题
    使用python的selenium库自动填写网页(疫情每日一报)
    十进制转换二进制toBinaryString源码分析
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299645.html
Copyright © 2020-2023  润新知