Android获取经纬度

机子自带GPS:

private void getlocationFromGPS(){
		Criteria criteria = new Criteria();
	        criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
	        criteria.setAltitudeRequired(false);//不要求海拔
	        criteria.setBearingRequired(false);//不要求方位
	        criteria.setCostAllowed(false);//不允许有花费
	        criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
	        
	      //获得位置服务的名称
	        String serviceName = this.LOCATION_SERVICE;
	        //获得位置服务的管理对象
	        LocationManager locationManager = (LocationManager)getSystemService(serviceName);
	      //从可用的位置提供器中,匹配以上标准的最佳提供器
	        String provider = locationManager.getBestProvider(criteria, true);
	        // 通过GPS获取定位的位置数据
	        location = locationManager.getLastKnownLocation(provider);
	        updateToNewLocation(location);

	            /**服务管理对象的监听器*/
	            //参数1:定位的方式   参数2:监听更新间隔时间(ms)  参数3:监听更新的距离(m) 参数4:监听的方法
	            locationManager.requestLocationUpdates(provider, 2000, 1, new LocationListener() {

	                public void onStatusChanged(String provider, int status, Bundle extras) {
	                }
	                public void onProviderEnabled(String provider) {
	                }
	                public void onProviderDisabled(String provider) {
	                }
	                public void onLocationChanged(Location location) {
	                    updateToNewLocation(location);
	                }
	            });
	 }


private void updateToNewLocation(Location location) {

		    
		    tv1 = (TextView) this.findViewById(R.id.tv_setting_adress);
		    if (location != null) {
		        latitude = location.getLatitude();
		        longitude= location.getLongitude();
		        tv1.setText("经纬度为: "+"维度:" +  latitude+ ",经度; " + longitude);
		          
		    } else {
		        tv1.setText("无法获取地理信息");
		        getlocationFrombaiduSDK();//当设备在室内往往GPS无法正常工作,这时候可以用baiduSDKAPI来获取位置服务
		        
		        locationClient.start();//开启baiduSDK服务
		        
	            /*
	             *当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。
	             *调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。
	             *如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,
	             *返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。
	             *定时定位时,调用一次requestLocation,会定时监听到定位结果。
	             */
	            locationClient.requestLocation();
	            
		        //test2();
		    }

		}

baiduSDKAPI:

1. 登录百度LBS Android SDK下载中下载Android SDK全部功能的开发包,您可以结合自身需求,自定义选择业务功能,进行打包下载。
2. 在使用之前,您需要先申请密钥,且密钥和应用证书和包名绑定。具体配置可在下载中心查看
3.将下载的jar包放进libs下

4.点击鼠标右键



void getlocationFrombaiduSDK(){
		 
		 locationClient = new LocationClient(this);
		//设置定位条件
	     LocationClientOption option = new LocationClientOption();
	     option.setOpenGps(true);        //是否打开GPS
	     option.setCoorType("bd09ll");       //设置返回值的坐标类型。
	     option.setPriority(LocationClientOption.NetWorkFirst);  //设置定位优先级
	     option.setProdName("LocationDemo"); //设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
	     option.setScanSpan(UPDATE_TIME);    //设置定时定位的时间间隔。单位毫秒
	     locationClient.setLocOption(option);
	   //注册位置监听器
	        locationClient.registerLocationListener(new BDLocationListener() {
	             
	            @Override
	            public void onReceiveLocation(BDLocation location1) {
	                // TODO Auto-generated method stub
	                if (location1 == null) {
	                	tv1.setText("无法获取地理信息");
	                    return;
	                }
	                
	                
	                latitude = location1.getLatitude();
			        longitude= location1.getLongitude();
			        LOCATION_COUTNS ++;
			        tv1.setText("经纬度为: "+"维度:" +  latitude+ ",经度; " + longitude + "fs" +LOCATION_COUTNS);
			        
			        Thread thread=new Thread(new Runnable()  
	                {  
	                   @Override  
	                    public void run()  
	                    {                  	   
	       	    		Message msg = new Message();  
	       	    		msg.what = sendGPS();;       	    		       	    		
	       	    		handler.sendMessage(msg); 
	                    }  
	                });  	    	    
			        thread.start();
	            }
	            public void onReceivePoi(BDLocation location) {
	            }

	        });	        
	 }


当然别忘了Manifest.xml里加上权限

 <uses-permission android:name="android.permission.INTERNET" /><!-- 这个权限用于进行网络连接-->
    
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>






猜你喜欢

转载自blog.csdn.net/sshzf/article/details/49814343
今日推荐